1094 The Largest Generation (25 分)
思路
统计哪一层的结点个数最多,也是用DFS搜索即可。
测试点只输入一个结点,在树的题目中应该会经常出现~
for(int i=1;i<=N;i++) //判断根结点的一个方法,i<N,使用N会报段错误,但i<=N则正确,说明存在只输入一个根结点的情况,小细节
if(!vecbool[i])
{root = i;}
代码
#include<bits/stdc++.h>
using namespace std;
int N,M;
const int maxn = 110;
vector<int> vec[maxn];
int vecbool[maxn] = {0};
int sum[maxn]={0};
int max_depth = 1;
void DFS(int index,int depth)
{
sum[depth] +=1 ;
if (depth > max_depth )
max_depth = depth;
for(int i=0;i<vec[index].size();i++)
{
DFS(vec[index][i],depth+1);
}
}
int main()
{
int id,number,in;
cin>>N>>M;
for(int i=0;i<M;i++)
{
cin>>id;
cin>>number;
for(int j=0;j<number;j++)
{
cin>>in;
vec[id].push_back(in);
vecbool[in] = 1;
}
}
int root;
//cout<<N;
for(int i=1;i<=N;i++) //判断根结点的一个方法,i<N,使用N会报段错误,但i<=N则正确,说明存在只输入一个根结点的情况,小细节
if(!vecbool[i])
{root = i;}
//cout<<root<<endl;
DFS(root,1);
int max_gene = 0;
int max_gene_level = 0;
for(int i=1;i<=max_depth;i++)
{
if(sum[i]>max_gene)
{
max_gene = sum[i];
max_gene_level = i;
}
}
cout<<max_gene<<" "<<max_gene_level<<endl;
}