题目链接
#include"stdio.h"
int set[1001],v[1001],cnt[10001],flag;
//初始化
void fun()
{int i;flag=1;for(i=1;i<=1000;i++){set[i]=i;v[i]=0;cnt[i]=0;}
}
//查找根节点
int find(int x)
{return x==set[x]?x:find(set[x]);
}
int judge()
{int i,t;for(i=1;i<=1000;i++){if(v[i]) cnt[find(i)]++;//如果只有一棵树的话,只能有一个根节点。}t=0;for(i=1;i<=1000;i++)if(cnt[i]>1) t++;//t计算根节点数目if(t!=1) return -1;else return 1;
}
int main()
{int a,b,i,count;count=0;fun();while(scanf("%d%d",&a,&b)!=EOF){if(a<0) break;if(a==0&&b==0){count++;if(flag==0)printf("Case %d is not a tree.\n",count);else{if(judge()==1)printf("Case %d is a tree.\n",count);elseprintf("Case %d is not a tree.\n",count);}fun();}v[a]=v[b]=1;if(find(a)==find(b)||find(set[b])!=b)//判断是否有环以及一个节点是否有多个根节点。flag=0;else set[b]=a;//合并}return 0;
}