PAT(Advance)1094.The Largest Generation
该题分制为25分。
题目链接https://pintia.cn/problem-sets/994805342720868352/problems/994805372601090048
题目给出树的每个非叶子节点和和其孩子,求出节点最多的一层,输出节点数和层数。
这题可以用邻接表存,然后层序遍历标记每个结点的层数。然后统计节点最多的一层就行了。
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
const int maxn = 110;
vector<int> tree[maxn];
queue<int>q;
int n, m;
int l[maxn] = { 0 };
struct Node
{
int level;
}node[maxn];
void levelOrder()
{
while (!q.empty())
{
int index = q.front();
q.pop();
for (int i = 0; i < tree[index].size(); i++)
{
int temp = tree[index][i];
q.push(temp);
node[temp].level = node[index].level + 1;
}
}
}
int main()
{
cin >> n >> m;
for (int i = 0; i < m; i++)
{
int root, k;
cin >> root >> k;
for (int j = 0; j < k; j++)
{
int temp;
cin >> temp;
tree[root].push_back(temp);
}
}
node[1].level = 1;
q.push(1);
levelOrder();
for (int i = 1; i <= n; i++)
{
l[node[i].level]++;
}
int MAX=0, index;
for (int i = 1; i <= n; i++)
{
if (l[i] > MAX)
{
MAX = l[i];
index = i;
}
}
cout << MAX << " " << index;
return 0;
}