求助带权书树的重心,样例和下载的点全对,但MEL0分
查看原帖
求助带权书树的重心,样例和下载的点全对,但MEL0分
672776
XTianShuo楼主2022/10/14 19:05

RT

#include<bits/stdc++.h>
using namespace std;

const int N=110,M=N*4;

int n;
int h[N],e[M],ne[M],tot,w[N];
long long ans=2147483647,f[N];
int siz[N],dep[N];

void add(int a,int b)
{
	e[++tot]=b;ne[tot]=h[a];h[a]=tot;
}

void dfs(int u,int fa)
{
	dep[u]=dep[fa]+1;
	siz[u]=w[u];
	for(int i=h[u];i;i=ne[i])
	{
		int j=e[i];
		if(j==fa) continue;
		dfs(j,fa);
		siz[u]+=siz[j];
	}
	f[1]+=dep[u]*siz[u];
}
void dp(int u,int fa)
{
	for(int i=h[u];i;i=ne[i])
	{
		int j=e[i];
		if(j==fa) continue;
		f[j]=f[u]+siz[1]-siz[j]*2;
		dp(j,u);
	}
	ans=min(ans,f[u]);
}

int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		int a,b,c;
		scanf("%d%d%d",&a,&b,&c);
		w[i]=a;
		if(b)	add(i,b),add(b,i);
		if(c)	add(i,c),add(c,i);
	}
	dfs(1,0);dp(1,0);
	printf("%d",ans);
	return 0;
}
2022/10/14 19:05
加载中...