您的位置:首页 > 其它

poj 1308 is it a tree

2013-05-19 19:52 323 查看
题目的意图还是很明显的就是判断这些给定的关系是不是能组成一棵树。所谓树也就是只有一个节点可以被称作root,这个也就是根节点。这里面的深层次含义就是有且只有一个节点的入度是0,其他的节点的入度为1,只里面要考虑进去自己连着自己的自环,树这个数据结构中自环是不允许的。所以这个题目就成了统计所有参与的节点的入度问题了。看程序,0ms。

#include<iostream>
#include<cstring>
using namespace std;
int count[500];
int visited[500];
int max(int a,int b)
{
if(a>b)
return a;
else return b;
}
int main()
{
int a,b,i,t,flag,sum,maxi,sum2;
t=0;
while(cin>>a>>b)
{
t=t+1;
flag=0;
sum=0;
sum2=0;
memset(visited,0,sizeof(visited));
memset(count,0,sizeof(count));
if(a==-1&&b==-1)
break;
if(a==0&&b==0)
{
cout<<"Case "<<t<<" is a tree."<<endl;
continue;
}
visited[a]=1;
visited[b]=1;
if(a==b)
flag=1;
count[b]+=1;
maxi=max(a,b);
while(cin>>a>>b)
{
if(a==0&&b==0)
break;
maxi=max(maxi,a);
maxi=max(maxi,b);
visited[a]=1;
visited[b]=1;
if(a==b)
flag=1;
count[b]+=1;
}
for(i=1;i<=maxi;i++)
if(visited[i]==1)
{
sum=sum+1;
sum2=sum2+count[i];
}
sum=sum-sum2;
if(sum!=1||flag==1)
cout<<"Case "<<t<<" is not a tree."<<endl;
else cout<<"Case "<<t<<" is a tree."<<endl;
}
return 0;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: