1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
#include <cstdlib> #include <algorithm> #include <cstring> #include <cctype> #include <vector> using namespace std; typedef long long ll; vector<int> depth[1005]; int n,par[1005]={0},bro[1005],son[1005],dep[1005]={0},maxd=0; bool vis[1005]={0}; void (){ scanf("%d",&n); dep[1]=0,depth[0].push_back(1); for(int i=2;i<=n;i++){ scanf("%d",&par[i]); bro[i]=son[par[i]],son[par[i]]=i; dep[i]=dep[par[i]]+1; depth[dep[i]].push_back(i); maxd=max(maxd,dep[i]); } } void dfs(int cur,int k){ if(k==2)return; if(par[cur]&&k<2) vis[par[cur]]=1,dfs(par[cur],k+1); for(int i=son[cur];i;i=bro[i]) if(k<2) vis[i]=1,dfs(i,k+1); } void solve(){ int ans=0; for(int i=maxd;i>=0;i--){ int S=depth[i].size(); for(int j=0;j<S;j++){ int u=depth[i][j]; if(vis[u])continue; if(par[par[u]])u=par[par[u]]; else if(par[u])u=par[u]; vis[u]=1,dfs(u,0),ans++; } } printf("%dn",ans); } int main(){ init(); solve(); return 0; }
|
近期评论