您的位置:首页 > 其它

hdu 1325 Is It A Tree?

2012-07-12 11:37 323 查看
题目分析:给定很多边,判断是否为树,,,,

1.有且仅有一个根节点,每个节点的入度不大于1(开始没考虑到这点,一直wa)。

2.无圈

2.0 0 是棵空树

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

struct node{
int v;
bool  flag;
int indegree;
}parent[100100];
int find(int x)
{
int i;
for(i=x;i!=parent[i].v;i=parent[i].v);
while(x!=i)
{
int temp=parent[x].v;
parent[x].v=i;
x=temp;
}
return i;
}
int main()
{
int x,y,num=0,c=0;
bool flag=true;
for(int i=1;i<=100000;i++)
{
parent[i].v=i;
parent[i].flag=false;
parent[i].indegree=0;
}
while(scanf("%d %d",&x,&y)!=EOF)
{
if(x+y==-2)
break;
if(x==0&&y==0)
{
c++;
for(int i=1;i<=100000;i++)
{
if(parent[i].flag!=0 && parent[i].v==i)
num++;
}
if(flag==true && (num==1||num==0) )
printf("Case %d is a tree.\n",c);
else
printf("Case %d is not a tree.\n",c);
//printf("%d***\n",flag);
for(int i=1;i<=100000;i++)
{
parent[i].v=i;
parent[i].flag=false;
parent[i].indegree=0;
}
num=0;
flag=true;
}
else
{
parent[x].flag=true;
parent[y].flag=true;
if(parent[y].indegree>=1)
flag=false;
else
parent[y].indegree=1;
int fx=find(x);
int fy=find(y);
if(fx==fy)
flag=false;
else if(fx<fy)
parent[fy].v=fx;
else
parent[fx].v=fy;
}
}
//system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: