左孩子右兄弟(dfs,贪心)(蓝桥杯)

 

 思路:选择一个儿子作为主干其他儿子作为养料

#include <bits/stdc++.h>
using namespace std;
#define ri register int
#define  M 100005

template <class G> void read(G &x)
{
    x=0;int f=0; char ch=getchar();
    while(ch<'0'||ch>'9'){f|=ch=='-';ch=getchar();}
    while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
    x=f?-x:x;
    return ;
} 

int n;
vector <int> p[M];
int dfs(int a)
{
    
    int mx=0;
    if(p[a].size()==0) return 1;
    for(ri i=0;i<p[a].size();i++)
    {
        int b=p[a][i];
        mx=max(mx,dfs(b));
    }
    mx+=p[a].size()-1;
    return mx+1;
    
}
int main(){
    
    read(n);
    for(ri i=2;i<=n;i++)
    {
        int a;
        read(a);
        p[a].push_back(i);
    }
    
    int  ans=0;
    ans=dfs(1)-1;
    printf("%d",ans);
    return 0;
    
    
}
View Code

 

posted @ 2022-03-31 16:54  VxiaohuanV  阅读(167)  评论(0编辑  收藏  举报