您的位置:首页 > 其它

codeforces 913B Christmas Spruce+链式前向星

2018-01-13 17:31 295 查看
B. Christmas Spruce

time limit per test1 second

memory limit per test256 megabytes

inputstandard input

outputstandard output

Consider a rooted tree. A rooted tree has one special vertex called the root. All edges are directed from the root. Vertex u is called a child of vertex v and vertex v is called a parent of vertex u if there exists a directed edge from v to u. A vertex is called a leaf if it doesn’t have children and has a parent.

Let’s call a rooted tree a spruce if its every non-leaf vertex has at least 3 leaf children. You are given a rooted tree, check whether it’s a spruce.

The definition of a rooted tree can be found here.

Input

The first line contains one integer n — the number of vertices in the tree (3 ≤ n ≤ 1 000). Each of the next n - 1 lines contains one integer pi (1 ≤ i ≤ n - 1) — the index of the parent of the i + 1-th vertex (1 ≤ pi ≤ i).

Vertex 1 is the root. It’s guaranteed that the root has at least 2 children.

Output

Print “Yes” if the tree is a spruce and “No” otherwise.

Examples

input

4

1

1

1

output

Yes

input

7

1

1

1

2

2

2

output

No

input

8

1

1

1

1

3

3

3

output

Yes

Note

The first example:



The second example:



It is not a spruce, because the non-leaf vertex 1 has only 2 leaf children.

The third example:



题意:

**给定一棵有根树 验证每个非叶子节点的叶子结点数是否大于3 怎么搞 模拟

我每次把这个边都建出来 如果h[i]==0说明我是叶子节点我需要给我的父亲+1

最后都做完了 循环统计一下非叶子节点的值是否都>=3即可**

代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
#define N 1005
int cnt
,head
,par
;
struct node
{
int next,to,w;
}edge
;
int main()
{
int n;
memset(head,0,sizeof(head));
memset(par,0,sizeof(par));
while(~scanf("%d",&n))
{
int num=0;

for(int i=2;i<=n;i++)
{
int x;
scanf("%d",&x);
edge[++num].next=head[x];
head[x]=num;
par[i]=x;
}
for(int i=2;i<=n;i++)
{
if(!head[i])  ++cnt[par[i]];
}
int flag=0;
for(int i=1;i<=n;i++)
{
if(head[i]&&cnt[i]<3)
{
flag=1;
break;
}
}
if(flag==1)
{
printf("No\n");
}
else
{
printf("Yes\n");
}
}
}


涉及到链式前向星:

http://blog.csdn.net/acdreamers/article/details/16902023

所有知识点都在这里了,如果哪里不会,自己遍历一遍就好了;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: