您的位置:首页 > 其它

poj - 1308 Is It A Tree?

2012-11-08 22:47 417 查看
水题,判断是否是一棵树,如果一个结点有多个父亲or图中有环就不是。

#include <stdio.h>
#include <string.h>
int fa[1005],v[1005];
int Find(int n)
{
if(fa
== -1)
return n;
fa
= Find(fa
);
return fa
;
}
int main()
{
int ca=1,a,b,i,j,f;
bool ok;
while(scanf("%d%d",&a,&b))
{
if(a==-1 && b==-1) break;
if(!a && !b)
{
printf("Case %d is a tree.\n",ca++);
continue;
}
ok = 1; i = 0;
memset(fa,-1,sizeof fa);
fa[b] = a; v[i] = b;
if(a == b)
{
ok = 0;
printf("Case %d is not a tree.\n",ca++);
}
while(scanf("%d%d",&a,&v[++i]),a&&v[i])
if(ok)
{
if(fa[v[i]] != -1 || Find(a)==v[i])
{
ok = 0;
printf("Case %d is not a tree.\n",ca++);
}
fa[v[i]] = a;
}
if(ok)
{
f = Find(v[0]);
for(j = 1; j <= i&&Find(v[j]) == f; j++);
if(j < i)
printf("Case %d is not a tree.\n",ca++);
else printf("Case %d is a tree.\n",ca++);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: