a数组记路径,mp记连接的边,mp[i][0]记有i点有几个边相连。
#include<bits/stdc++.h>
using namespace std;
int n,m,Q;
int mp[1000000][1000000];
int a[1000000];
void f(int fr,int to){
queue<int> q;
q.push(fr);
a[fr]=to;
while(!q.empty()){
if(a[1]==0){
printf("Yes\n");
return ;
}
for(int i = 1;i<=mp[q.front()][0];i++){
if(a[q.front()]>=0&&a[mp[q.front()][i]]!=a[q.front()]-1){
q.push(mp[q.front()][i]);
a[mp[q.front()][i]]=a[q.front()]-1;
}
}
q.pop();
}
printf("No\n");
}
int main(){
scanf("%d%d%d",&n,&m,&Q);
for(int i=1;i<=m;i++){
int x,y;
scanf("%d%d",&x,&y);
mp[y][mp[x][0]+1]=x;
mp[x][mp[x][0]+1]=y;
mp[y][0]++;
mp[x][0]++;
}
memset(a,0x3f,sizeof(a));
for(int i=1;i<=Q;i++){
int x,y;
scanf("%d%d",&x,&y);
f(x,y);
memset(a,0x3f,sizeof(a));
}
return 0;
}