Counting Leaves
2016-07-19 21:27
253 查看
A family hierarchy is usually presented by a pedigree tree. Your job is to count those family members who have no child.
0<N<1000<N<1000<N<100,
the number of nodes in a tree, and MMM
(<N<N<N),
the number of non-leaf nodes. Then MMM
lines follow, each in the format
The input ends with NNN
being 0. That case must NOT be processed.
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.
For example, the first sample case represents a tree with only 2 nodes, where
这里个人用的是vector 才刚开始会点c++的 代码有点长
#include <stdio.h>
#include <vector>
using namespace std;
vector<int>tree[1005], high[1005];
int check(int num)
{
if (!tree[num].size()) return 1;
return 0;
}
int main()
{
int n, m;
while (scanf("%d %d", &n, &m), n) {
high[1].push_back(1);
int i = 0, j,c=1,flag=0,f=0;
while (m--) {//save m
int num, cont,k;
scanf("%d %d", &num, &cont);
for (i = 0; i < cont; i++) {
scanf("%d", &k);
tree[num].push_back(k);
}
}//save m
int cont1 = 1;
for (c = 2; ; c++) {
if (c == 2) {
if (!check(1)) {
for (i = 0; i < tree[1].size(); i++) {
high[c].push_back(tree[1][i]);
cont1++;
}
}
else { printf("1"); f = 1; break; }
}
else {
for (i = 0; i < high[c - 1].size(); i++) {
int s = high[c - 1][i];
for (j = 0; j < tree[s].size(); j++) {
high[c].push_back(tree[s][j]);
cont1++;
}
}
}
if (cont1 == n)break;
}
if (!f) {
printf("0");
flag = 1;
for (i = 2; i <= c; i++) {
int cont2=0;
for (j = 0; j < high[i].size(); j++)
cont2 += check(high[i][j]);
printf(" %d", cont2);
}
}
for (i = 0; i <= n; i++) {
tree[i].clear();
high[i].clear();
}
printf("\n");
}
return 0;
}
Input Specification:
The input consists of several test cases, each starts with a line containing0<N<1000<N<1000<N<100,
the number of nodes in a tree, and MMM
(<N<N<N),
the number of non-leaf nodes. Then MMM
lines follow, each in the format
ID K ID[1] ID[2] ... ID[K]where
IDis a two-digit number representing a given non-leaf node,
Kis 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.
The input ends with NNN
being 0. That case must NOT be processed.
Output Specification:
For each test case, you are supposed to count those family members who have no childfor 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.
For example, the first sample case represents a tree with only 2 nodes, where
01is the root and
02is its only child. Hence on the root
01level, there is
0leaf node; and on the next level, there is
1leaf node. Then we should output
0 1in a line.
Sample Input:
2 101 1 02
1 0
7 401 2 02 03
06 1 07
02 2 04 05
03 1 06
0 0
Sample Output:
0 1 1 0 0 2 1
这里个人用的是vector 才刚开始会点c++的 代码有点长
#include <stdio.h>
#include <vector>
using namespace std;
vector<int>tree[1005], high[1005];
int check(int num)
{
if (!tree[num].size()) return 1;
return 0;
}
int main()
{
int n, m;
while (scanf("%d %d", &n, &m), n) {
high[1].push_back(1);
int i = 0, j,c=1,flag=0,f=0;
while (m--) {//save m
int num, cont,k;
scanf("%d %d", &num, &cont);
for (i = 0; i < cont; i++) {
scanf("%d", &k);
tree[num].push_back(k);
}
}//save m
int cont1 = 1;
for (c = 2; ; c++) {
if (c == 2) {
if (!check(1)) {
for (i = 0; i < tree[1].size(); i++) {
high[c].push_back(tree[1][i]);
cont1++;
}
}
else { printf("1"); f = 1; break; }
}
else {
for (i = 0; i < high[c - 1].size(); i++) {
int s = high[c - 1][i];
for (j = 0; j < tree[s].size(); j++) {
high[c].push_back(tree[s][j]);
cont1++;
}
}
}
if (cont1 == n)break;
}
if (!f) {
printf("0");
flag = 1;
for (i = 2; i <= c; i++) {
int cont2=0;
for (j = 0; j < high[i].size(); j++)
cont2 += check(high[i][j]);
printf(" %d", cont2);
}
}
for (i = 0; i <= n; i++) {
tree[i].clear();
high[i].clear();
}
printf("\n");
}
return 0;
}
相关文章推荐
- 工具箱
- MyEclipse 创建 WebProject 项目
- 开发中遇到的JSON字符串转换的小问题
- Lowest Common Ancestor of a Binary Search Tree
- HDU - 1021 Fibonacci Again
- week2 布局技巧与列表控件
- Insert Interval
- week1 Android应用界面开发
- 我的成长日记(java14天)
- Flask Web开发 第1章
- vba工具
- 定义页面的Dispose方法:[before]unload事件启示录
- SharedPreferences初学
- java-jni-03-JNI Types and Data Structure
- UVA - 123 Searching Quickly
- 【HDU 1195】Open the Lock(BFS)
- Java开发准备事项(三)---MyEclipse安装与破解
- CodeForces - 569A Music
- 问题汇总(硬件问题)
- HDU 1754 I Hate It【线段树入门题,单点替换,区间最值】