中南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;
}

 

 

posted @ 2014-03-10 13:17  galaxy77  阅读(212)  评论(0编辑  收藏  举报