【9. 追逐战】【8分求助】

#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?

你试一下呗

我也没看懂…

咋加?

屏幕截图 2025-01-23 190947
你在一个点f>=2时都算了一次了,为啥还要入队啊

你看看对不对(蒟蒻不敢说话)