题目描述
给定一棵树,输出树的根root,孩子最多的结点max以及他的孩子
输入
第一行:n(结点数<=100),m(边数<=200)。
以下m行;每行两个结点x和y,
表示y是x的孩子(x,y<=1000)。
输出
第一行:树根: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<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int n,m,tree[105];
memset(tree,0,sizeof(tree));
cin>>n>>m;//节点和边的数目
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
tree[y]=x;//y是x的孩子
}
int root;
for(int i=1;i<=n;i++)//找出树根
{
if(tree[i]==0)//i的父亲节点为0,即没有父亲节点
{
root=i;
break;
}
}
int max=0,maxroot;
for(int i=1;i<=n;i++)//找出孩子最多的节点
{
int sum=0;
for(int j=1;j<=n;j++)
if(tree[j]==i)sum++;
if(sum>max)
{
max=sum;
maxroot=i;
}
}
cout<<root<<endl<<maxroot<<endl;
for(int i=1;i<=n;i++)//孩子最多节点的孩子
if(tree[i]==maxroot)
cout<<i<<' ';
return 0;
}