N - Is It A Tree?(判断环)

题意,就是判断这点点是不是组成的一颗树,也就是判断是否有环,就是没看出来如果是森林怎么办,试一试吧,最可恶的还没有说有多少节点。。。。。就是个坑
//////////////////////////////////////////////////////////////////
坑,这题就是一个彻头彻尾的坑,首先数据不连接,需要一个标记数组来判断出现的都是那些节点,数组要开到10w,而且还有可能这棵树没有节点,是一个空树,也就是只有 0 0,还要判断是不是森林,要输出这也是一颗树.....确实很无聊的题目,需要让人试错

 

 #include <stdio.h>

#include<algorithm>
using namespace std;

const int maxn = 100005;

int f[maxn], use[maxn];

void init()
{
    for(int i=0; i<maxn; i++)
        f[i] = i, use[i] = 0;
}
int Find(int x)
{
    if(f[x] != x)
        f[x] = Find(f[x]);
    return f[x];
}

int main()
{
    int u, v, ok=1, t=1;

    init();
    while(scanf("%d%d", &u, &v), u!= -1 || v!=-1)
    {
        if(u+v == 0)
        {
            int sum = 0;

            for(int i=0; i<maxn; i++)
            {
                if(use[i] == 1 && f[i] == i)
                    sum++;
            }

            if(ok && sum < 2)printf("Case %d is a tree.\n", t++);
            else printf("Case %d is not a tree.\n", t++);

            ok = 1;
            init();
        }
        else
        {
            use[u] = use[v] = 1;
            u = Find(u), v = Find(v);
            if(u != v)
                f[u] = v;
            else ok = 0;
        }
    }

    return 0;
}
posted @ 2015-07-23 11:18  无忧望月  阅读(168)  评论(0)    收藏  举报
levels of contents