2372: 【作】【基础】谁的孙子最多(1775)

内存限制:128 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:4 解决:1

题目描述

给定一棵树,其中 1 号结点是根结点,问哪一个结点的孙子结点最多,有多少个。(孙子结点,就是儿子结点的儿子结点。)

输入

第一行一个整数 N(N≤10000),表示树结点的个数。

此后 N 行,第 i 行包含一个整数 Ci,表示 i 号结点儿子结点的个数,随后共 Ci 个整数,分别表示一个 i 号结点的儿子结点(结点编号在 1∼N 之间)。

输出

一行两个整数,表示孙子结点最多的结点,以及其孙子结点的个数,如果有多个,输出编号最小的(本题测试数据确保有解)。

样例输入 复制

5
2 2 3
1 4
0
1 5
0

样例输出 复制

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=1;i<=n;i++) {
    	cin>>c;
    	for(int j=0;j<c;j++) {
    		cin>>t;
    		a[i].push_back(t);
		}
	}
	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;
}