- 题意:有一些给你一些父子关系,让你计算出人数最多的一代的个数以及代数。
- 分析:其实就是计算一棵树的最大宽度和其对应的深度,在这里我们就只用一个数组记录每个个体的父辈,本题还算简单,没有出现一个人既有父亲又有母亲的情况,所以我们就用一个数组就搞定了。得到这个数组后,我们再遍历每一个个体,算出他属于第几代,然后找出哪一代的个数最多就OK了。下面是详细的代码:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int max_n = 105;
int find_generation_num(int* parent, int cur)
{
int res = 1;
while(parent[cur] != -1)
{
res += 1;
cur = parent[cur];
}
return res;
}
int main()
{
freopen("/home/give/PAT/TheLargestGeneration.txt", "r", stdin);
int n,m;
cin>>n>>m;
n += 1;
int parents[n];
for(int i=0;i<n;i++)
{
parents[i] = -1;
}
for(int i=0;i<m;i++)
{
int parent, num;
cin>>parent>>num;
for(int j=0;j<num;j++)
{
int child;
cin>>child;
parents[child] = parent;
}
}
int generation_num[n];
memset(generation_num, 0, sizeof(generation_num));
for(int i=0;i<n;i++)
{
int daishu = find_generation_num(parents, i);
generation_num[daishu] += 1;
}
int max_count = generation_num[0];
int max_index=0;
for(int i=1;i<n;i++)
{
if(generation_num[i] > max_count)
{
max_count = generation_num[i] ;
max_index = i;
}
}
cout<<max_count<<" "<<max_index<<endl;
}