WA在了#20上
查看原帖
WA在了#20上
1123633
Oier_Dr_Wu楼主2025/1/26 20:32

求调!!

#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;
}

答案: 25943778800

我的输出:173975024

就最后一个点没过去,服了。 明显就不在一个数量级上的,肯定哪里错的很离谱!

2025/1/26 20:32
加载中...