poj 1308 is it a tree

题目的意图还是很明显的就是判断这些给定的关系是不是能组成一棵树。所谓树也就是只有一个节点可以被称作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;
}



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值