最小生成树。。
#include"stdio.h"
int set[1002],v[1003],cnt[1002],flag;
void fun()
{
int i;
flag=0;
for(i=1;i<=1000;i++)
{
set[i]=i;
v[i]=0;
cnt[i]=0;
}
}
int find(int x)
{
return set[x]==x?x:find(set[x]);
}
int ffun()
{
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++;
}
if(t>1) return -1;
else return 1;
}
int main()
{
int a,b,num;
fun();num=0;
while(scanf("%d%d",&a,&b))
{
if(a<0) break;
if(a==0&&b==0)
{
num++;
if(flag)
printf("Case %d is not a tree.\n",num);
if(!flag)
{
if(ffun()==1) printf("Case %d is a tree.\n",num);
else printf("Case %d is not a tree.\n",num);
}
fun();
continue;
}
v[a]=v[b]=1;
if(find(a)==find(b)||find(b)!=b)//这里注意find(b)!=b不能忘,是为了防止
flag=1;
else set[b]=a;
}
return 0;
}