#include<stdio.h>
#include<string.h>
int a[10000];
bool f[10000];
int find(int t)
{
while(t!=a[t])
{
t=a[t];
}
return t;
}
int main()
{
int t1,t2;
int i;
for(i=1;i<=10000;i++)
a[i]=i;
memset(f,0,sizeof(f));
int flag=0;
int mm=1;
int max=0;
while(scanf("%d%d",&t1,&t2),t1>=0&&t2>=0)
{
if(t1>max)
max=t1;
if(t2>max)
max=t2;
f[t1]=f[t2]=true;
if(t1==t2&&t2==0)
{
if(flag==1)
printf("Case %d is not a tree.\n",mm++);
else
{
int i;
int s=0;
for(i=1;i<=max&&f[i];i++)
{
if(a[i]==i)
s++;
}
if(s>=2)
printf("Case %d is not a tree.\n",mm++);
else
printf("Case %d is a tree.\n",mm++);
}
flag=0;
memset(f,0,sizeof(f));
for(i=1;i<=10000;i++)
a[i]=i;
max=0;
}
else
{
int s1=find(t1);
int s2=find(t2);
if(s1!=s2)
{
if(a[s2]==s2) //防止出现一个点有两个双亲
a[s2]=s1;
else
flag=1;
}
else
flag=1;
}
}
return 0;
}
poj 1308
最新推荐文章于 2018-09-02 14:55:45 发布