时间限制: 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
1. #include <iostream> 2. #include <cstdio> 3. using namespace std; 4. int tree[110],n,m; 5. int main() 6. { 7. int x,y,root,maxn=0,maxp; 8. cin>>n>>m; 9. for(int i=1;i<=m;i++){ 10. cin>>x>>y; 11. tree[y]=x; 12. } 13. for(int i=1;i<=n;i++){ 14. if(tree[i]==0){ 15. root=i; 16. break; 17. } 18. } 19. for(int i=1;i<=n;i++){ 20. int cnt=0; 21. for(int j=1;j<=n;j++) 22. if(tree[j]==i) cnt++; 23. if(cnt>maxn){ 24. maxn=cnt;maxp=i; 25. } 26. } 27. cout<<root<<endl; 28. cout<<maxp<<endl; 29. for(int i=1;i<=n;i++) 30. if(tree[i]==maxp) 31. cout<<i<<" "; 32. return 0; 33. }