题目
原题链接:B. Christmas Spruce
题意
非叶节点拥有三个子节点称为“spruce”。问所构建的图是不是所有非叶节点都是“spruce”。
参考了其他作者的思路和代码。利用链式前向星记录所有边。利用head[i]记录i节点是否是叶子,最后遍历所有节点即可。
代码
#include
using namespace std;
struct node{
int y,next;
}edge[1100];
int head[1100]={-1},par[1100],cnt[1100];
int main() {
int n,t,num=1;
cin>>n;
for(int i=2;i<=n;i++){
cin>>t;
par[i]=t;edge[num].y=i;edge[num].next=head[t];head[t]=num;
num++;
}
for(int i=2;i<=n;i++){
if(!head[i]) cnt[par[i]]++;
}
for(int i=1;i<=n;i++){
if(head[i] && cnt[i]<3) {printf("NO\n");return 0;}
}
printf("YES\n");
return 0;
}