您的位置:首页 > 理论基础 > 计算机网络

http://acm.nyist.net/JudgeOnline/problem.php?pid=129

2011-11-03 11:26 429 查看
#include<iostream>
#include<cstdio>
#define N 10005
using namespace std;
int parent
;int r
;
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
=1;
r[m]=1;
if(x==y)  flag=0;
else
{
if(parent[m]==m) parent[m]=x;防止一个点有两个根结点。。。
else flag=0;
}
}
}return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ini