 /**//*
題意:給出一個無向圖,一個起點,問是否在某個時候,這個人有可能在所有點都可以出現
人不能停留在原地
畫一下圖就知道,只要存在奇圈,那么奇圈的點就可以任何時刻都出現人
同時,對于奇圈外的,奇圈可以源源不斷地傳到奇圈外
這樣肯定存在某個時刻,其他點也可以同時出現人(因為源源不斷傳出來,所以肯定會波及所有)
*/
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;

const int MAXN = 100005;

vector<int>G[MAXN];
bool flag;
int vi[MAXN];

void dfs(int u,int p,int dep)
  {
if(flag)return;
vi[u]=dep;
for(int i=0,size=G[u].size();i<size;i++)
 {
int v=G[u][i];
if(v==p)continue;
 if(vi[v]==dep) {flag=true;return;}
if(vi[v]==0)dfs(v,u,-dep);//注意是沒visit過的才繼續dfs
}
}
int main()
  {
int T,t=1;
scanf("%d",&T);
while(T--)
 {
printf("Case %d: ",t++);
int n,m,s;
scanf("%d%d%d",&n,&m,&s);
for(int i=0;i<n;i++)
G[i].clear();
for(int i=0,a,b;i<m;i++)
 {
scanf("%d%d",&a,&b);
G[a].push_back(b);
G[b].push_back(a);
}
memset(vi,0,sizeof(vi));
flag = false;
dfs(s,s,1);
puts(flag?"YES":"NO");
}
return 0;
}

|