rt,代码如下
#include<bits/stdc++.h>
using namespace std;
int n,m,q,cnt,head[10000001],dis[10000001][2],vis[1001][1001],q1[1000001],q2[1000001],l,r;
struct edge
{
int nxt,to;
}e[10000001];
void add(int u,int v)
{
e[++cnt].to=v;
e[cnt].nxt=head[u];
head[u]=cnt;
}
void spfa()
{
for(int i=1;i<=n;i++)
dis[i][1]=dis[i][0]=1e9;
dis[1][0]=0;
l=1;
r=0;
q1[++r]=1;
while(l<=r)
{
int x=q1[l];
int y=q2[l];
l++;
vis[x][y]=0;
for(int i=head[x];i;i=e[i].nxt)
{
int v=e[i].to;
if(dis[v][0]>dis[x][1]+1)
{
dis[v][0]=dis[x][1]+1;
if(!vis[v][0])
{
vis[v][0]=1;
q1[++r]=v;
q2[r]=0;
}
}
if(dis[v][1]>dis[x][0]+1)
{
dis[v][1]=dis[x][0]+1;
if(!vis[v][1])
{
vis[v][1]=1;
q1[++r]=v;
q2[r]=1;
}
}
}
}
return;
}
signed main()
{
cin>>n>>m>>q;
for(int i=1;i<=m;i++)
{
int u,v;
cin>>u>>v;
add(u,v);
add(v,u);
}
spfa();
if(head[1]==0)
dis[1][0]=1e9;
for(int i=1;i<=q;i++)
{
int a,L;
cin>>a>>L;
if(l>=dis[a][L%2])
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}