類型:樹(shù)的遍歷,dfs
題目:
A family hierarchy is usually presented by a pedigree tree. Your job is to count those family members who have no child.
Input
Each input file contains one test case. Each case starts with a line containing 0 < N < 100, the number of nodes in a tree, and M (< N), the number of non-leaf nodes. Then M lines follow, each in the format:
ID K ID[1] ID[2] … ID[K]
where ID is a two-digit number representing a given non-leaf node, K is the number of its children, followed by a sequence of two-digit ID’s of its children. For the sake of simplicity, let us fix the root ID to be 01.
Output
For each test case, you are supposed to count those family members who have no child for every seniority level starting from the root. The numbers must be printed in a line, separated by a space, and there must be no extra space at the end of each line.
The sample case represents a tree with only 2 nodes, where 01 is the root and 02 is its only child. Hence on the root 01 level, there is 0 leaf node; and on the next level, there is 1 leaf node. Then we should output “0 1” in a line.
Sample Input
2 1
01 1 02
Sample Output
0 1
分析題目
可憐英語(yǔ)不好,題目都看不懂,先查一下一些單詞
family hierarchy家譜 pedigree tree譜系樹(shù)
For the sake of simplicity為了簡(jiǎn)單起見(jiàn)
seniority排行
好了單詞查完了,大概了解了題目意思,輸入端首先第一行給一個(gè)N表示樹(shù)的總節(jié)點(diǎn)個(gè)數(shù),第二個(gè)數(shù)M表示non-leaf node個(gè)數(shù),后面每一行就表示所有non-leaf的結(jié)構(gòu),最終輸出每一層葉子節(jié)點(diǎn)的個(gè)數(shù)
代碼
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> v[100];
int book[100];
int maxdepth = -1;
void dfs(int index, int depth)
{
if(v[index].size() == 0)
{
maxdepth = max(depth, maxdepth);
book[depth]++;
return;
}
for(int i=0; i<v[index].size(); i++)
{
dfs(v[index][i], depth+1);
}
}
int main()
{
int N, M;
cin >> N >> M;
for(int i = 0; i<M; i++)
{
int index, childnum;
cin >> index >> childnum;
for(int j = 0; j<childnum; j++)
{
int child;
cin >> child;
v[index].push_back(child);
}
}
dfs(1, 0);
int k = 0;
for(k=0; k<maxdepth; k++)
{
cout << book[k] << " ";
}
cout << book[k];
return 0;
}
總結(jié)
其實(shí)是一道簡(jiǎn)單的dfs題目,復(fù)習(xí)了一下dfs的操作,參考了柳神的代碼
還可以~