CodeFoeces-913B

题目

原题链接: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;
}

你可能感兴趣的:(CodeFoeces-913B)