#include<iostream> #include<string.h> using namespace std; const int N=1e5+10; int n; int h[N],e[N],ne[N],idx; int maxd[N]; void add(int a,int b) { e[idx]=b,ne[idx]=h[a],h[a]=idx++; } int dfs(int u) { int cnt=0; for(int i=h[u];~i;i=ne[i]) { int j=e[i]; maxd[u]=max(maxd[u],dfs(j));//搜索j,maxd[u]求的是u的儿子结点的最大深度 cnt++;//cnt++ 表示u的儿子有几个 } return maxd[u]+cnt;//搜索到叶子,返回0 } int main() { scanf("%d",&n); memset(h,-1,sizeof h); for(int i=2;i<=n;i++) { int p; scanf("%d",&p); add(p,i); } printf("%d",dfs(1)); return 0; }
标签:cnt,idx,int,孩子,++,ne,兄弟,maxd From: https://www.cnblogs.com/tolter/p/17225420.html