题目描述
给定一棵树,输出树的根root,孩子最多的结点max以及他的子节点。
输入格式
第一行:n(结点个数≤100),m(边数≤200)。
以下m行:每行两个结点x和y,表示y是x的子节点(x,y≤n)。
输出格式
第一行:树根:root;
第二行:子节点最多的结点max,如果有一样多的输出编号最小的点
第三行:max的子节点。
输入样例
8 7
4 1
4 2
1 3
1 5
2 6
2 7
2 8
输出样例
4
2
6 7 8
#include<bits/stdc++.h>
using namespace std;
int n,m;
vector<vector<int> >op(110);//存储树
int s[110];
int main()
{
cin>>n>>m;
for(int i=0;i<m;i++){
int x,y;
cin>>x>>y;
op[x].push_back(y);
s[y]++;//表是入度
}
int k=0,t;
for(int i=1;i<=n;i++)if(s[i]==0)cout<<i<<endl;入度为0,说明没有父节点,则该点为根节点
for(int i=1;i<=n;i++){
if(op[i].size()>k){
k=op[i].size();//迭代寻找子节点最多的点
t=i;
}
}
cout<<t<<endl;
for(int i=0;i<k;i++)cout<<op[t][i]<<" ";
cout<<endl;
return 0;
}
**************总有地上的生灵敢于直面雷霆的威光——不过你终将被砌进神像****************
版权声明:本文为J_X0110原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。