#include<bits/stdc++.h>
const int maxn=500005;
using namespace std;
int T,n,m,k;
int f[maxn];
bool vis[maxn];
vector<int>g[maxn];
int main(){
cin>>T;
while(T--){
cin>>n>>m>>k;
queue<int>q;
memset(vis,0,sizeof(vis));
memset(f,0,sizeof(f));
for(int i=0;i<=n;i++){
g[i].clear();
}
for(int i=1;i<=k;i++){
int u;
cin>>u;
// vis[u]=1;
f[u]=2;
}
for(int i=1;i<=m;i++){
int u,v;
cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
}
q.push(1);
while(!q.empty()){
int u=q.front();
q.pop();
for(int v:g[u]){
if(vis[v]){
continue;
}
if(f[v]>=2){
vis[v]=1;
for(int w:g[v]){
f[w]++;
}
q.push(v);
}
}
}
if(vis[1]){
cout<<"yes\n";
}else{
cout<<"no\n";
}
}
return 0;
}
我康康
要加判断吧
必须是逃生点连接vis才++
样例都过不了了
额
,我再看看
你这个搜索方向,不应该是从逃生点开始吗?
逃生点进,然后计数,标记,进站,继续,直到站空
你A了?
没用,然后是队列,不是站
我还记得思路…
你先试试吗
不管,加样例过不了
你最好在广搜那部分外面加一段计算f数组的值的循环
what?
你试一下呗
我也没看懂…
咋加?
你在一个点f>=2时都算了一次了,为啥还要入队啊
你看看对不对(蒟蒻不敢说话)