题目描述
给定一棵树,输出树的根root,孩子最多的结点max以及他的孩子
输入
第一行:n(0<结点数<=100),m(0<边数<=200)。
以下m行;每行两个结点x和y,表示y是x的孩子(x,y<=1000)。
其中所有结点的编号不一定是连续的
输出
第一行:树根:root。
第二行:孩子最多的结点max(如果所求的结点有多个,则输出编号最大的那个)。
第三行:max的孩子。
样例输入
5 4
4 1
4 2
1 3
1 5
样例输出
4
4
1 2
代码
#include <bits/stdc++.h>
using namespace std;
int son[1100],fa[1100],maxx=-1,maxxi;
int main()
{int n,m,x,y;cin>>n>>m;for(int i=1;i<=m;i++){cin>>x>>y;fa[y]=x;son[x]+=1;}for(int i=1;i<=1000;i++){if(fa[i]==0&&son[i]!=0)//该节点存在且该节点没父亲节点(是根节点){cout<<i<<endl;break;}}for(int i=1;i<=1000;i++){if(son[i]>=maxx&&son[i]!=0){maxx=son[i];maxxi=i;}}cout<<maxxi<<endl;for(int i=1;i<=1000;i++){if(fa[i]==maxxi)//是儿子最多的节点的儿子{cout<<i<<" ";}}return 0;
}