/**//* 题意:给出一个无向图,一个起点,问是否在某个时候,这个人有可能在所有点都可以出现 人不能停留在原地 画一下图就知道,只要存在奇圈,那么奇圈的点就可以任何时刻都出现人 同时,对于奇圈外的,奇圈可以源源不断地传到奇圈外 这样肯定存在某个时刻,其他点也可以同时出现人(因为源源不断传出来,所以肯定会波及所有) */ #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; }
|