题目描述
给定一棵树,输出树的根root,孩子最多的结点max以及他的孩子
输入
第一行:n(结点数<=100),m(边数<=200)。
以下m行;每行两个结点x和y,表示y是x的孩子(x,y<=1000)。
以下m行;每行两个结点x和y,表示y是x的孩子(x,y<=1000)。
输出
第一行:树根:root。
第二行:孩子最多的结点max。
第三行:max的孩子。
第二行:孩子最多的结点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 m,n,a[1000],b[1000],num[10000],ant=0,u,k,l,x,y,maxx=0; int main() { // freopen("找树根和孩子.in","r",stdin); //freopen("找树根和孩子.out","w",stdout); cin>>n>>m; for(int i=1;i<=m;i++) { cin>>x>>y; a[y]=x; } for(int i=1;i<=n;i++) { if(a[i]==0) { u=i; break; } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(a[j]==i) { ant++; } } if(ant>maxx) { maxx=ant; l=i; } ant=0; } cout<<u<<" "; cout<<l<<" "; for(int i=1;i<=n;i++) { if(a[i]==l) cout<<i<<" "; } return 0; }