#include<bits/stdc++.h>
using namespace std;
int t,n,m,k;
int num[500005],vis[500005];
vector<int> g[500005];
int main(){
scanf("%d",&t);
while(t--){
memset(vis,0,sizeof(vis));
memset(num,0,sizeof(num));
queue<int> q;
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=n;i++) g[i].clear();
for(int i=1;i<=k;i++){
int x;
scanf("%d",&x);
q.push(x);
vis[x]=true;
num[x]=2;
}
for(int i=1;i<=m;i++){
int u,v;
scanf("%d%d",&u,&v);
g[u].push_back(v);
g[v].push_back(u);
}
bool ans=true;
while(!q.empty()){
int u=q.front();
q.pop();
if(num[u]<2) continue;
if(u==1){
printf("yes\n");
ans=false;
}
for(int i=0;i<g[u].size();i++){
if(vis[g[u][i]]>1) continue;
vis[g[u][i]]++;
num[g[u][i]]++;
if(vis[g[u][i]]==1) q.push(g[u][i]);
}
}
if(ans) printf("no\n");
}
return 0;
}
应该是 vis 数组的问题,比如这张图就过不去(其中2、4、5是逃生点):
但是不会调,求大佬指点qwq(解决问题还可以获得一个洛谷关注哦!)