2374: 【作】【基础】谁的孙子最多II(1776)
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:1
解决:1
题目描述
给定一棵树,其中 1 号结点是根结点,问哪一个结点的孙子结点最多,有多少个。(孙子结点,就是儿子结点的儿子结点。)
输入
第一行一个整数 N(N≤10000),表示树结点的个数。
此后 N−1 行,第 i 行包含一个整数 fi,表示 i+1 号结点的父亲。
输出
一行两个整数,表示孙子结点最多的结点,以及其孙子结点的个数,如果有多个,输出编号最小的。
样例输入 复制
5
1
1
2
4
样例输出 复制
1 1
提示
#include<bits/stdc++.h>
using namespace std;
vector<int> a[10010];
int n,ans1,ans2;
int main(){
cin>>n;
int c,t;
for(int i=2;i<=n;i++) {
cin>>t;
a[t].push_back(i);
}
for(int i=1;i<=n;i++) {
int sum=0;
for(int j=0;j<a[i].size();j++) {
sum+=a[a[i][j]].size();
}
if (sum>ans2) {
ans1=i;
ans2=sum;
}
}
cout<<ans1<<" "<<ans2;
return 0;
}