YCOJ家谱

题目:
Description

家谱:又称族谱、宗谱等。是一种以表谱形式,记载一个家族的世系繁衍及重要人物事迹的书。皇帝的家谱称玉牒,如新朝玉牒、皇宋玉牒。它以记载父系家族世系、人物为中心,由正史中的帝王本纪及王侯列传、年表等演变而来。

家谱是一种特殊的文献,就其内容而言,是中国五千年文明史中具有平民特色的文献,记载的是同宗共祖血缘集团世系人物和事迹等方面情况的历史图籍。家谱属珍贵的人文资料,对于历史学、民俗学、人口学、社会学和经济学的深入研究,均有其不可替代的独特功能。

这一天小白拿到了自己家的家谱,小白便想知道自己家的家谱中,每位祖先有多少孩子(他孩子的孩子也是他的孩子)。但是家族历史源远流长,家谱实在太庞大了,自己一个人完全数不过来。热心的你便自告奋勇帮小白写一个程序,来统计每位祖先他有多少孩子。


Input

输入的第一行有一个整数 n(1 ≤ n ≤ 100000),表示家谱中总共的人数。

然后有 n-1行,每行有两个整数 x(1 ≤ x ≤ n), y(1 ≤ y ≤ n)表示 x 是 y 的父亲。


Output

输出 n 行,每行有一个整数,表示第 i 个人他有多少孩子。


Sample Input 1 

4
1 2
1 3
2 4
Sample Output 1

3
1
0
0

大家都知道家谱的样子吧,如下图,是以树状进行下去的:
YCOJ家谱_第1张图片
这也要用到一种图的遍历,具体在图和树基础里会讲到,这里我也就不再将了,这种遍历,是用动态数组实现的,输入一个就push一个到动态数组里面,再过一遍就行了。
源代码:

#include 
using namespace std;
vector a[100010];//动态数组的定义
int father[100010];
int sons[100010];
void dfs(int u){
	for (int i=0;i> n;
	
	for (int i=1;i> x>>y;
		father[y] = x;
		a[x].push_back(y);
	}
	int u;
	for (int i=1;i

你可能感兴趣的:(题解,YCOJ,题解)