提交时间:2025-10-18 15:30:11

运行 ID: 38664

#include<bits/stdc++.h> using namespace std; int n,in[1000005],sum; bool b[1000005]; vector<int> p[1000005]; queue<int> q; int dfs(int x,int fa){ int ans=1; for(int i=0;i<p[x].size();i++){ if(p[x][i]==fa) continue; ans+=dfs(p[x][i],x); } return ans; } int main(){ // freopen("a.in","r",stdin); // freopen("flower.out","w",stdout); cin>>n; for(int i=1;i<=n-1;i++){ int v; cin>>v; p[i+1].push_back(v); p[v].push_back(i+1); in[v]++; in[i+1]++; } for(int i=1;i<=n;i++){ if(in[i]>2) sum++,q.push(i); } if(sum==0){ cout<<n*1ll*(n-1)/2; return 0; } else if(sum==1&&q.front()>3){ cout<<0; return 0; } if(sum==1&&in[q.front()]==3){ if(n==4){ cout<<3; return 0; } int x=q.front(); long long y,z,e; y=dfs(p[x][0],x)*1ll; z=dfs(p[x][1],x)*1ll; e=dfs(p[x][2],x)*1ll; cout<<y*z+z*e+y*e; return 0; } else if(in[q.front()]==3){ while(q.size()>=2){ b[q.front()]=1; q.pop(); } int x=q.front(); b[x]=1; } return 0; }