hdu 1325

来源:互联网 发布:淘客cms系统 编辑:程序博客网 时间:2024/05/17 07:19

就是一个简单的并查集。注意树的特点和要求。

#include<cstdio>#include<cstring>const int maxn = 10000 + 5;//最坑的是没有给出范围。int fa[maxn];int g[maxn];int root(int x){    if(x != fa[x])    {        fa[x] = root(fa[x]);    }    return fa[x];}int main(){    int f, e, kase = 1;    while(scanf("%d%d", &f, &e) && f > 0 && e > 0)    {        memset(g, 0, sizeof(g));        for(int i = 0; i <= maxn; i++)            fa[i] = i;        int fx = root(f);        int fy = root(e);        bool ok = true;        if(fx == fy) ok = false;        fa[fy] = fx;        while(scanf("%d%d", &f, &e) && f && e)        {            fx = root(f);            fy = root(e);            //printf("%d %d\n", fx, fy);            if(fx == fy || fy != e) ok = false;            fa[fy] = fx;        }        if(ok)        {            int t = 0, temp = 0;            for(int i = 0; i <= maxn; i++)//检查是否只有一棵树            {                if(fa[i] != i)                {                    t = root(i);                }                if(!temp) temp = t;                else if(temp != t) ok = false;            }        }        if(ok) printf("Case %d is a tree.\n", kase++);        else printf("Case %d is not a tree.\n", kase++);    }    return 0;}


原创粉丝点击