提交时间:2025-10-18 15:34:31

运行 ID: 38667

#include <bits/stdc++.h> using namespace std; #define ll long long ll n,tri[1000005]; vector<ll> v[1000005]; ll search(ll now,ll pre){ ll sum=1; for(ll i=0;i<v[now].size();i++){ if(v[now][i]==pre) continue; sum+=search(v[now][i],now); }return sum; } void find(){ } int main(){ freopen("flower.in","r",stdin); freopen("flower.out","w",stdout); cin>>n; ll z; for(int i=2;i<=n;i++){ cin>>z; v[i].push_back(z); v[z].push_back(i); } ll cnt=0; for(int i=1;i<=n;i++){ if(v[i].size()==3) tri[++cnt]=i; if(v[i].size()>3){ cout<<0; return 0; } } if(cnt==0){ cout<<n*n-1; return 0; } if(cnt==1){ ll x1,x2,x3; x1=search(v[tri[1]][0],tri[1]); x2=search(v[tri[1]][1],tri[1]); x3=search(v[tri[1]][2],tri[1]); cout<<x1*x2+x1*x3+x2*x3; return 0; }else{ } fclose(stdin); fclose(stdout); return 0; } //