题目描述
给定一棵树,输出树的根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<stdio.h>
#include<string.h>
int a[105];
int b[105];
int main()
{
int n,m;
scanf("%d%d",&n,&m);
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
int c[105][2]={0};
for(int i=0;i<m;i++){
int x,y;
scanf("%d%d",&x,&y);
c[i][0]=x;
c[i][1]=y;
a[x]++;
b[y]++;
}
int root;
int max=-1;
int g;
for(int i=0;i<n;i++){
if(a[i]!=0&&b[i]==0){
root=i;
}
if(a[i]>max){
max=a[i];
g=i;
}
}
printf("%d\n%d\n",root,g);
for(int i=0;i<n;i++){
if(c[i][0]==g)
printf("%d ",c[i][1]);
}
}