rt,或者也可以告诉一下MLE的原因
#include <iostream>
#include <cstdio>
#include <iomanip>
#include <cmath>
#include <bitset>
#include <algorithm>
#include <set>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <vector>
#include <queue>
#include <stack>
#include <cstring>
#include <string>
#define FOR(i, m, n) for (long long i = m; i <= n; i++)
#define FRO(i, m, n) for (long long i = m; i >= n; i--)
#define ll int
#define ull unsigned long long
#define uint unsigned int
#define mp(a, b) make_pair(a, b)
#define INF 2147483647
#define INFF 0x3f3f3f3f3f3f3f3f
#define INFFF 0x7fffffffffffffff
using namespace std;
const int maxn = 100010;
const int num = 1;
int head[maxn], nxt[maxn * num], to[maxn * num], tot;
bool v1[maxn],v2[maxn];
int dist1[maxn],dist2[maxn];
int a, b;
void add(int u, int v)
{
to[++tot] = v;
nxt[tot] = head[u];
head[u] = tot;
return;
}
queue<pair<ll, ll>> q;
void bfs()
{
q.push(mp(1,0));
while (!q.empty())
{
ll y = q.front().first;
ll nw = q.front().second;
// cout<<y<<" "<<nw<<endl;
q.pop();
if(nw%2==1&&!v1[y]){
v1[y]=1;
for (int i = head[y]; i; i = nxt[i])
{
int z = to[i];
if(v2[z])continue;
dist1[z]=dist2[y]+1;
q.push(mp(z, 0));
}
}
else if(nw%2==0&&!v2[y])
{
if(v2[y])continue;
v2[y]=1;
for (int i = head[y]; i; i = nxt[i])
{
int z = to[i];
if(v1[z])continue;
dist2[z]=dist1[y]+1;
q.push(mp(z, 1));
}
}
}
}
int main()
{
ll n, m, q;
cin >> n >> m >> q;
FOR(i, 1, m)
{
ll u, v;
cin >> u >> v;
add(u, v);
add(v, u);
}
bfs();
FOR(i, 1, q)
{
ll a, b;
cin >> a >> b;
if(dist1[a]<=b&&dist1[a]%2==b%2){
cout<<"Yes"<<endl;
}
else if(dist2[a]<=b&&dist2[a]%2==b%2){
cout<<"Yes"<<endl;
}
else cout<<"No"<<endl;
}
return 0;
}