提交时间:2025-10-18 15:42:04

运行 ID: 38675

#include<bits/stdc++.h> using namespace std; int n,in[1000005],sum; vector<int> p[1000005]; queue<int> q; int dfs(int x,int fa){ sum=1; for(int i=0;i<p[x].size();i++){ cout<<p[x][i]<<' '<<x<<'\n'; if(p[x][i]==fa) continue; sum+=dfs(p[x][i],x); } cout<<x<<"\n\n"; return sum; } 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&&in[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; cout<<p[x][0]<<' '<<p[x][1]<<' '<<p[x][2]<<'\n'; cout<<p[5][1]<<' '<<p[6][0]<<'\n'; y=dfs(p[x][0],x)*1ll; z=dfs(p[x][1],x)*1ll; e=dfs(p[x][2],x)*1ll; cout<<y<<' '<<z<<' '<<e<<'\n'; cout<<y*z+z*e+y*e; return 0; } else if(in[q.front()]==3){ while(q.size()){ q.pop(); } } return 0; }