PTA 1004 Counting Leaves (30)(30 分)(dfs或者bfs)
1004 Counting Leaves (30)(30 分)
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
1004.计算叶子个数
一个家庭的层级结构经常被表现为一个家谱树。你的任务是统计这些家庭成员中谁没有孩子。
输入
每个输入文件包含一个测试实例。每个实例开始的一行包含N和M,N指树中的结点个数(0<N<100),M指非叶结点的个数。然后下面有M行,每行的格式如下:
ID K ID[1] ID[2] ...ID[K]
ID是一个两位数的数字,表示一个非叶结点。K表示其孩子的数量。随后是一个序列,序列中是该结点的孩子结点的两位数ID。为了简单起见,我们把根结点的ID固定为01。
输出
对于每个测试实例,你应该计算从根结点开始的每一层中没有孩子的家庭成员的个数。数字必须在一行内输出,用空格分隔,在每行结尾不能有多余的空格。
测试样例表示了一个只有两个结点的树,01是根结点,02是它仅有的孩子。因此在根结点01层级,没有叶节点。再下一层级,有一个叶结点。然后我们应该在一行内输出“0 1”。
我用dfs建的树,要注意特殊情况:
0 0 是0
1 0是1
dfs的第4个测试点一直段错误(27/30),求各位大佬帮助,bfs第4个也一直段错误,第2个答案错误(19/30),晕死
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#include<queue>
#include<map>
#define inf 0x3f3f3f3f
using namespace std;
queue<int>q[];
int a[];
int rec[];
int n,m;
void build(int root,int k)
{
int count=;
while(!q[k].empty())
{
int x=q[k].front();
q[k].pop();
a[n*root+rec[count]]=x;
if(!q[x].empty())
{
build(n*root+rec[count],x);
}
count++;
}
} int main()
{
cin>>n>>m;
for(int i=;i<=n+;i++)
{
rec[i-]=i-n;
}
memset(a,,sizeof(a));
if(n==)
cout<<;
else if(m==)
cout<<;
for(int i=;i<=m;i++)
{
int x;
cin>>x;
int nn;
cin>>nn;
for(int j=;j<=nn;j++)
{
int y;
cin>>y;
q[x].push(y);
}
}
a[]=;
build(,);
int st=,en=;
for(int i=;i<=m*n;i++)
{
int sum=;
bool f=;
for(int j=st;j<=st+en-;j++)
{
if(a[j]!=&&a[n*j+rec[]]==)
sum++;
if(a[j]!=)
f=;
}
if(f==) break;
if(st==)
{
cout<<sum;
}
else
{
cout<<" "<<sum;
}
st=st+en;
en=en*n;
}
return ;
}
bfs代码AC代码
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#include<queue>
#include<map>
#include<vector>
#define inf 0x3f3f3f3f
using namespace std;
int n,m;
vector<int>v[];
queue<int>q;
int main()
{
cin>>n>>m;
for(int i=;i<=m;i++)
{
int x;
cin>>x;
int num;
cin>>num;
for(int j=;j<=num;j++)
{
int y;
cin>>y;
v[x].push_back(y);
}
}
q.push();
if(m==)
cout<<;
else if(n==)
cout<<;
else
{
if(v[].size()==)
{
cout<<;
}
else
cout<<;
int k=;
int kk=;
int nn=;
int count=;
while(!q.empty())
{
if(nn==k)
{
cout<<" "<<count;
count=;
nn=;
k=kk;
kk=;
}
nn++;
int x=q.front();
q.pop();
for(int j=;j<v[x].size();j++)
{
int y=v[x].at(j);
if(v[y].size()==)
count++;
else
{
q.push(y);
kk++;
} }
}
cout<<" "<<count;
}
return ;
}
PTA 1004 Counting Leaves (30)(30 分)(dfs或者bfs)的更多相关文章
- 1004 Counting Leaves (30 分)(树的遍历)
给出一棵树,问每一层各有多少叶子节点 dfs遍历树 #include<bits/stdc++.h> using namespace std; vector<]; int n,m; i ...
- 1004 Counting Leaves (30 分)
A family hierarchy is usually presented by a pedigree tree. Your job is to count those family member ...
- 1004. Counting Leaves(30)—PAT 甲级
A family hierarchy is usually presented by a pedigree tree. Your job is to count those family member ...
- PTA 1004 Counting Leaves
题目描述: A family hierarchy is usually presented by a pedigree tree. Your job is to count those family ...
- PAT甲1004 Counting Leaves【dfs】
1004 Counting Leaves (30 分) A family hierarchy is usually presented by a pedigree tree. Your job is ...
- 1004 Counting Leaves (30分) DFS
1004 Counting Leaves (30分) A family hierarchy is usually presented by a pedigree tree. Your job is ...
- PAT 1004 Counting Leaves (30分)
1004 Counting Leaves (30分) A family hierarchy is usually presented by a pedigree tree. Your job is t ...
- 1004. Counting Leaves (30)
1004. Counting Leaves (30) A family hierarchy is usually presented by a pedigree tree. Your job is ...
- PAT 解题报告 1004. Counting Leaves (30)
1004. Counting Leaves (30) A family hierarchy is usually presented by a pedigree tree. Your job is t ...
随机推荐
- JQuery强大的操控标签能力
jquery选择器 $("#myId") 选择id为myId的元素 $(".myClass") 选择class为myClass的元素 ...
- Android程序员学WEB前端(7)-CSS(2)-伪类字体文本背景边框-Sublime
转载请注明出处:http://blog.csdn.net/iwanghang/article/details/76618373 觉得博文有用,请点赞,请评论,请关注,谢谢!~ 伪类: <!DOC ...
- Python2、3学习及迁移
一.Python2.7 Python 2.7教程 - 廖雪峰的官方网站 Python 基础教程 | 菜鸟教程 二.Python3 Python教程 - 廖雪峰的官方网站 Python3 教程 | 菜鸟 ...
- 显卡、显卡驱动、显存、GPU、CUDA、cuDNN
显卡 Video card,Graphics card,又叫显示接口卡,是一个硬件概念(相似的还有网卡),执行计算机到显示设备的数模信号转换任务,安装在计算机的主板上,将计算机的数字信号转换成模拟 ...
- iOS开发心得
一步一步来,慢慢走. 正如昨天黄大哥所说:全身心地投入,遇到喜欢的工作更好,遇到不喜欢的工作那就把它当作一种能力的培养.坚持坚持!!!
- 个人博客网站 www.superzhang.site
用django新建了一个博客网站,访问地址为www.superzhang.site.欢迎来逛逛.
- 64位ubuntu下Android开发环境的配置
本文介绍如何在64位ubuntu上搭建android的开发环境. 系统:ubuntu12.04LTS 使用的是ADT Bundle for Linux和jdk1.7(open jdk也可) 一共分为3 ...
- LOJ2324. 「清华集训 2017」小 Y 和二叉树【贪心】【DP】【思维】【好】
LINK 思路 首先贪新的思路是处理出以一个节点为根所有儿子的子树中中序遍历起始节点最小是多少 然后这个可以两次dfs来DP处理 然后就试图确定中序遍历的第一个节点 一定是siz<=2的编号最小 ...
- 简单实现Jmail发送邮件
package com.chauvet.util; import java.util.Properties; import javax.mail.*; import javax.mail.intern ...
- IOS UIView 放大缩小
/创建缩小了的视图myWeiBoImageVC = [[UIViewController alloc] init];myWeiBoImageVC.view.clipsToBounds = YES;my ...