-找树根2-

给定一棵树的节点关系,程序通过输入找到树的根节点和子节点最多的节点及其子节点编号。首先,通过递归查找每个节点的父节点来确定树根,然后找出子节点数量最多的节点,最后输出子节点最多的节点及其所有子节点编号(按升序排列)。
摘要由CSDN通过智能技术生成

题目描述

一棵树有n个结点,已知树上所有的父子结点关系,请问该树的根是几号结点,哪个结点的子结点最多,该结点有哪些子结点。

输入

第一行,有1个整数n代表结点数量(0<n≤100) 
接下来若干行;每行两个结点x和y,表示y是x的孩子(1≤x,y≤1000)
请注意:树上结点的编号不一定是连续的

输出

第一行输出树根的编号。
第二行输出孩子最多的结点编号(如果有多个结点的子结点都是最多的,则输出编号最大的那个)。 
第三行输出第二行求出的孩子最多的结点,有哪些孩子,按照编号从小到大,输出这些孩子的编号,用空格隔开。

样例输入

5
4 1
4 2
1 3
1 5

样例输出

4
4
1 2

参考代码:

#include<bits/stdc++.h>
using namespace std;
int n,a[1005],b[1005],s[1005],k[1005],l[1005],maxn,ip;
int f(int x){
    if(s[x]==0)
        return x;
    return f(s[x]);
}
int main(){
    cin>>n;
    for(int i=0;i<n-1;i++){
        cin>>a[i]>>b[i];
        s[b[i]]=a[i];
        k[a[i]]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值