题目描述
给定一棵树,输出树的根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
这一题真的是一道水题。非常非常非常非常非常非常非常非常水的一道水题。
好了,废话不多说。
这一题的思路就是:
首先输入我就不多说了。
接着,用一个for循环,把x和y(题目有写)读入进去。并且做一个记录。用两个数组——一个a数组,一个b数组。分别存储x和y的值。
接着,再定义一个f数组,把f数组的第y项标记为一。
然后,定义一个h数组,统计每一个数字也就是x出现了几次。
最后再弄一个判断:if(s<h[x]) s=h[x],p=x;
接着用一个for循环,判断一下if(f[i]==0) cout<<i<<endl;
搞定以后输出p的值。
最后,用一个for循环判断,if(a[i]==p) cout<<b[i]<<" ";
OK了,此题结束
代码:
#include<bits/stdc++.h>
using namespace std;
int n,k,i,p,a[201],b[201],f[201],s,x,y,h[201];
int main(){
cin>>n>>k;
for(i=1;i<=k;i++){
cin>>x>>y;
a[i]=x,b[i]=y;
f[y]=1;
h[x]++;
if(s<h[x]) s=h[x],p=x;
}
for(int i=1;i<=n;i++) if(f[i]==0) cout<<i<<endl;
cout<<p<<endl;
for(int i=1;i<=k;i++)if(a[i]==p) cout<<b[i]<<" ";
}
简单吧?记得三连哦(点赞,关注,转发)!