您的位置:首页 > 其它

hdu 1325 Is It A Tree?

2012-07-19 19:34 417 查看
题目链接

#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);
else
printf("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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: