信息学奥赛一本通 数据结构 1336:【例3-1】找树根和孩子 第三章 树
时间限制: 1000 ms内存限制: 65536 KB。以下m行:每行两个结点x和y,表示y是x的孩子(x,y≤1000)。给定一棵树,输出树的根root,孩子最多的结点max以及他的孩子。第一行:n(结点个数≤100),m(边数≤200)。第三行:max的孩子(按编号由小到输出)。1336:【例3-1】找树根和孩子。第二行:孩子最多的结点max;第一行:树根:root;
·
1336:【例3-1】找树根和孩子
时间限制: 1000 ms 内存限制: 65536 KB
【题目描述】
给定一棵树,输出树的根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<bits/stdc++.h>
using namespace std;
vector<int>a[105];
int n, m;
bool ro[105];//ro[i]表示i是否有父亲1.有父亲,0,没父亲
int main(){
cin >> n >> m;
for(int i = 1; i <= m; i++){
int x, b;
cin >> x >> b;
a[x].push_back(b);
ro[b] = 1;
}
for(int i = 1; i <= n; i++){
if(ro[i] == 0){//没父亲
cout << i << endl;//即为根节点
break;
}
}
int ma = 0, mx;
for(int i = 1; i <= n; i++){//找儿子最大值
if(a[i].size() > ma){
ma = a[i].size(), mx = i;
}
}
cout << mx << endl;
sort(a[mx].begin(),a[mx].end());//排序
for(int i = 0; i < a[mx].size(); i++) {
cout << a[mx][i] << ' ';
}
return 0;
}

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)