#include<iostream>
#include<cstdio>
#define N 10005
using namespace std;
int parent[N];int r[N];
void make()
{
for(int i=0;i<N;i++)
{
parent[i]=i;
r[i]=0;
}
}
int find_set(int x)
{
return parent[x]==x?x:find_set(parent[x]);
}
int main()
{
int m,n,x,y,flag,sum,Case=0;
while(1)
{
make();
flag=1;sum=0;
while(~scanf("%d%d",&n,&m)!=EOF)
{
if(m==-1&&n==-1) return 0;
if(n==0&&m==0)
{
if(flag)
{
for(int i=1;i<N;i++)判断该树,是不是连通的,,,
{
if(!r[i]) continue;
if(parent[i]==i) sum++;
}
if(sum>1) flag=0;
}
if(flag) printf("Case %d is a tree.\n",++Case) ;
else printf("Case %d is not a tree.\n",++Case) ;
break;
}
x=find_set(n);
y=find_set(m);
r[n]=1;
r[m]=1;
if(x==y) flag=0;
else
{
if(parent[m]==m) parent[m]=x;防止一个点有两个根结点。。。
else flag=0;
}
}
}return 0;
}
http://acm.nyist.net/JudgeOnline/problem.php?pid=129
最新推荐文章于 2021-06-29 10:43:34 发布