BUPT OJ 统计节点个数

13 篇文章 0 订阅

#include<iostream>
#define MAXSIZE 1000
using namespace std;
class node
{
	public:
		int degree;
		int parent;
		int numOfSon;
		int son[1000];
		node()
		{
			degree=0;
			parent=0;
			numOfSon=0;
		}
};
class tree
{
	public:
	node point[MAXSIZE];
	int nums;
	
};
int calc(int fa,int son,tree * mytree)
{
	
	mytree->point[fa].degree++;
	mytree->point[son].degree++;
	mytree->point[son].parent=fa;
	mytree->point[fa].son[mytree->point[fa].numOfSon++]=son;
}
int main()
{
	int t=0,edge=0;	
	cin>>t;
	while(t--)
	{
		tree* mytree=new tree;
		cin>>edge;
		edge--;
		mytree->nums=edge+1;
		int fa,son;
		while(edge--)
			{
			
				cin>>fa>>son;
				calc(fa,son,mytree);
			
			
			}
		int total=0,parent;
		for(int i=0;i<mytree->nums;i++)
		{
			parent=mytree->point[i].parent;
		//	cout<<mytree->point[parent].degree<<"<---fa\n";
		//	cout<<mytree->point[i].degree<<"<-----me\n";
		//	int numOfSon=mytree->point[i].numOfSon;
		//	int sonpos=0;
		//		for(int i=0;i<numOfSon;i++)
		//		{
		//			sonpos=mytree->point[i].son[i];
		//			if(mytree->point[i].degree<mytree->point[sonpos].degree)
		//			  {
		//			  	ok=false;
		//			  	break;
		//			  }
					
		//		}
			if(mytree->point[i].degree>=mytree->point[parent].degree)
			{
				int numOfSon=mytree->point[i].numOfSon;
				bool ok=true;
				int sonpos=0;
				for(int j=0;j<numOfSon;j++)
				{
					sonpos=mytree->point[i].son[j];
					if(mytree->point[i].degree<mytree->point[sonpos].degree)
					  {
					  	ok=false;
					  	break;
					  }
					
				}
				if(ok)total++;
				
			}
			
			
			
		}
		delete mytree;
		cout<<total<<endl;
	}
}

代码冗余度太高,懒得改了。懂懂思想就好。为了简单就直接定义大数组了。。


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值