計蒜客:家譜---dfs

題目描述:
輸入一個n,接下來有n-1行。
輸入父親和兒子
求n個人,每個人的直系後代有多少。

數據樣例解釋:
在這裏插入圖片描述
1有3個直系後代(自己有2個親孩子,其中2有一個親孩子);
2有1個直系後代(4沒有直系後代了);
3沒有直系後代;
4沒有直系後代;

AC代碼:

#include <stdlib.h>
#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <vector>
#include <string.h>
#include <math.h>
using namespace std;
vector<int>a[11000]; 
int ans;
void dfs(int n)//計算第n個人有多少個直系後代 
{
	ans+=a[n].size();
	for(int i=0;i<a[n].size();i++)
		dfs(a[n][i]);
}
int main()
{
	int n,x,y,i;
	cin>>n;
	for(i=0;i<n-1;i++)
	{
		cin>>x>>y;
		a[x].push_back(y);
	}
	for(i=1;i<=n;i++)
	{
		ans=0;
		dfs(i);//計算第i個人有多少個直系後代 
		cout<<ans<<endl;
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章