#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
vector<int> g[N];
unsigned long long ans;
int n,size[N],root,dep[N],depn[N];
void dfs(int d,int f){
size[d]=1;
dep[d]=dep[f]+1;
if(d!=root) depn[dep[d]]++;
// cout<<d<<" "<<dep[d]<<"\n";
for(auto u:g[d]){
if(u==f) continue;
dfs(u,d);
size[d]+=size[u];
if(d==root){
for(int i=3;i<N;i++){
if(depn[i]==0) break;
ans+=(depn[i]*(depn[i]-1));
}
memset(depn,0,sizeof depn);
}
}
}
int main(){
ios::sync_with_stdio();
cin.tie(),cout.tie();
int n;
cin>>n;
for(int i=1,u;i<=n;i++){
cin>>u;
g[u].push_back(i);
g[i].push_back(u);
if(u==i) root=i;
}
dep[root]=0;
dfs(root,root);
ans+=n*3-2;
for(auto u:g[root]){
if(u!=root)
ans+=size[u]*(n-size[u]-1);
}
cout<<ans;
}
就最后一个点没过去,服了。 明显就不在一个数量级上的,肯定哪里错的很离谱!