追逐战 WA41分求助


#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是逃生点):
屏幕截图 2025-01-25 205839
但是不会调,求大佬指点qwq(解决问题还可以获得一个洛谷关注哦!)

这里先不急,等到有两次的时候再进queue

或者可以直接在遍历g[u][i]的邻节点,看看有没有逃生点

已A,谢谢