A1094

一開始慣性思維了,只獲取了葉子結點相關內容.

#include<cstdio>
#include<cstdlib>
#include<string.h>
#include<math.h>
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<stack>
#include<queue>
#include<string>
#include<algorithm>
using namespace std;
const int maxn=110;
vector<int> child[maxn];
int layers[10];
void DFS(int root,int layer){
	if(child[root].size()==0){
		layers[layer]++;              //該寫法只能適用於獲取葉子結點相關內容.
		return;
	}
	for(int i=0;i<child[root].size();i++){
		DFS(child[root][i],layer+1);
	}
}
int main(){
	#ifdef ONLINE_JUDGE
	#else
		freopen("1.txt","r",stdin);
	#endif
	int n,m,id,k;
	memset(layers,0,sizeof(layers));
	scanf("%d%d",&n,&m);
	for(int i=0;i<m;i++){
		scanf("%d %d",&id,&k);
		for(int j=0;j<k;j++){
			int temp;
			scanf("%d",&temp);
			child[id].push_back(temp);
		}
	}
	DFS(1,1);
	int idx=0,MAX=-1;
	for(int i=1;i<10;i++){
		if(layers[i]>MAX){
			MAX=layers[i];
			idx=i;
		}
	}
	printf("%d %d\n",MAX,idx);
	return 0;
}

改進.(實際上是將layers[layer]++;位置挪了一下,結果會完全不同.)這時候該語句就能用到樹的每一個結點中.

#include<cstdio>
#include<cstdlib>
#include<string.h>
#include<math.h>
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<stack>
#include<queue>
#include<string>
#include<algorithm>
using namespace std;
const int maxn=110;
vector<int> child[maxn];
int layers[10];
void DFS(int root,int layer){
	layers[layer]++;
	if(child[root].size()==0){
		return;
	}
	for(int i=0;i<child[root].size();i++){
		DFS(child[root][i],layer+1);
	}
}
int main(){
	#ifdef ONLINE_JUDGE
	#else
		freopen("1.txt","r",stdin);
	#endif
	int n,m,id,k;
	memset(layers,0,sizeof(layers));
	scanf("%d%d",&n,&m);
	for(int i=0;i<m;i++){
		scanf("%d %d",&id,&k);
		for(int j=0;j<k;j++){
			int temp;
			scanf("%d",&temp);
			child[id].push_back(temp);
		}
	}
	DFS(1,1);
	int idx=0,MAX=-1;
	for(int i=1;i<10;i++){
		if(layers[i]>MAX){
			MAX=layers[i];
			idx=i;
		}
	}
	printf("%d %d\n",MAX,idx);
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章