//40~60pts
#include <bits/stdc++.h>
using namespace std;
const int MAXN=1005;
int vex[MAXN],k,n,m,q;
struct edge {
int u,v,next;
}e[MAXN*2];
int vis[MAXN][MAXN];
void add(int u,int v){
k++;
e[k].u=u;
e[k].v=v;
e[k].next=vex[u];
vex[u]=k;
}
void dfs(int u,int s){
if(s==-1||vis[u][s]) return;
vis[u][s]=1;
for(int i=vex[u];i;i=e[i].next){
int v=e[i].v;
dfs(v,s-1);
}
return;
}
int main(){
cin>>n>>m>>q;
while(m--){
int u,v;
cin>>u>>v;
add(u,v);
add(v,u);
}
while(q--){
int u,L;
memset(vis,0,sizeof(vis));
cin>>u>>L;
dfs(u,L);
if(vis[1][0]) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}
希望能解释清楚:
1.dfs 的两个参数设计,不太理解。
2.尤其是 vis 数组两个下标的设计,怎么想的?
3.dfs 第二个参数,和 vis 数组之间的配合,是怎么考虑的?
#在线焦急等待