【3-1】找树根和hai子(STL方法)

题目描述

给定一棵树,输出树的根root,孩子最多的结点max以及他的子节点。

输入格式

第一行:n(结点个数≤100),m(边数≤200)。

以下m行:每行两个结点x和y,表示y是x的子节点(x,y≤n)。

输出格式

第一行:树根: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;
int n,m;
vector<vector<int> >op(110);//存储树
int s[110];

int main()
{
	cin>>n>>m;
	for(int i=0;i<m;i++){
		int x,y;
		cin>>x>>y;
		op[x].push_back(y);
		s[y]++;//表是入度
	}
	int k=0,t; 

	for(int i=1;i<=n;i++)if(s[i]==0)cout<<i<<endl;入度为0,说明没有父节点,则该点为根节点

	for(int i=1;i<=n;i++){
		if(op[i].size()>k){
			k=op[i].size();//迭代寻找子节点最多的点
			t=i;
		}
	}
	cout<<t<<endl;
	for(int i=0;i<k;i++)cout<<op[t][i]<<" ";
	cout<<endl;
	
	return 0;
}
**************总有地上的生灵敢于直面雷霆的威光——不过你终将被砌进神像****************


版权声明:本文为J_X0110原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。