我的程序是这样的
#include <bits/stdc++.h>
#include <stack>
#include <queue>
#include <vector>
using namespace std;
const int N=100005;
int tot,h[N],n,m,a,L,q,u,v,dis[N][2];
bool vis[N][2];
struct node {
int to,nxt;
}edge[N<<1];
void add(int u,int v){
edge[++tot]={v,h[u]};
h[u]=tot;
}
void SPFA(int s){
int u,v,i;
memset(dis,0x3f,sizeof(dis));dis[s][0]=0;
queue <int> q; q.push(s);vis[s][0]=1;
while(q.size()){
u=q.front();
for(i=h[u];i;i=edge[i].nxt) {
v=edge[i].to;
if(dis[u][0]+1<dis[v][1]) {
dis[v][1]=dis[u][0]+1;
if(!vis[v][1]) q.push(v),vis[v][1]=1;
}
if(dis[u][1]+1<dis[v][0]){
dis[v][0]=dis[u][1]+1;
if(!vis[v][0]) q.push(v),vis[v][0]=1;
}
}
q.pop();vis[u][0]=vis[u][1]=0;
}
dis[s][0]=2;
}
int main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n>>m>>q;
for(int i=1;i<=m;i++)
cin>>u>>v,add(u,v),add(v,u);
SPFA(1);
while (q--){
cin>>a>>L;
if(dis[a][L%2]!=0x3f3f3f && dis[a][L%2]<=L) cout<<"Yes\n";
else cout<<"No\n";
}
}