中南oj 1356: Catch 从某一点开始 是否 有一时刻他可以在图里的任意一点上
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1356
【题意】: 给一张无向图 一个人从某一点开始走 判断是否 有一时刻他可以在图里的任意一点上
【思路】:只要看图中是否有奇圈 有的话就可以 没有就不行 ()
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<math.h> #include<vector> using namespace std; vector<int > g[100002]; int vis[100002],ans; void find1(int u,int x,int f) { if(vis[u]!=-1) { if(vis[u]!=x) ans=1; return ; } if(ans) return ; vis[u]=x; for(int i=0;i<g[u].size();i++) { int v; v=g[u][i]; if(v!=f) find1(v,!x,u); } } int main() { int t,n,m,s,i,a,b,p=1; scanf("%d",&t); while(t--) { scanf("%d%d%d",&n,&m,&s); for(i=0;i<=n;i++) g[i].clear(); for(i=0;i<m;i++) { scanf("%d%d",&a,&b); g[a].push_back(b); g[b].push_back(a); } memset(vis,-1,sizeof(vis)); ans=0; find1(s,0,-1); if(ans) printf("Case %d: YES\n",p++); else printf("Case %d: NO\n",p++); } return 0; }