题目描述
给定一棵树,输出树的根root,孩子最多的结点max以及他的孩子
输入
第一行:n(结点数<=100),m(边数<=200)。
以下m行;每行两个结点x和y,表示y是x的孩子(x,y<=1000)。
输出
第一行:树根:root。
第二行:孩子最多的结点max。
第三行:max的孩子。
样例输入 Copy
8 7 4 1 4 2 1 3 1 5 2 6 2 7 2 8
样例输出 Copy
4 2 6 7 8
#include<iostream>
#include<algorithm>
#include<queue>
#include<unordered_map>
#include<cstring>
using namespace std;
int main()
{
int n,m;
cin >> n >> m;
unordered_map<int, vector<int>> List;
vector<int> degree(n+1, 0);
for (int i = 1; i <= m; i++)
{
int x, y;
cin >> x >> y;
List[x].push_back(y);
degree[y]++;
}
int max = 0;
int number = 0;
int root = 1;
for (int i = root; i <= n; i++)
{
if (degree[i] == 0)
{
root = i;
break;
}
}
for (int i = 1; i <= n; i++)
{
if (List[i].size() > max)
{
number = i;
max = List[i].size();
}
}
cout << root << endl << number << endl;
for (int child : List[number])
{
cout << child << " ";
}
cout << endl;
return 0;
}