BUPT OJ 統計節點個數

#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;
	}
}

代碼冗餘度太高,懶得改了。懂懂思想就好。爲了簡單就直接定義大數組了。。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章