换根法 3AC 7WA 求调
查看原帖
换根法 3AC 7WA 求调
357163
shyr楼主2022/4/28 14:01
#include<bits/stdc++.h>
using namespace std;
long long dp[100005], minn = 1e18;
int n, c[1005], u, v, w, siz[100005];
vector< pair<int, int> > d[100005];
void dfs(int x, int fa){
	siz[x] = c[x];
	for(int i = 0; i < d[x].size(); ++i){
		int y = d[x][i].first, val = d[x][i].second;
		if(y == fa) continue;
		dfs(y, x);
		siz[x] += siz[y];
		dp[x] += dp[y] + siz[y] * val;
	}
}
void dfs2(int x, int fa){
	for(int i = 0; i < d[x].size(); ++i){
		int y = d[x][i].first, val = d[x][i].second;
		if(y == fa) continue;
		dp[y] = dp[x] - siz[y] * val + (siz[1] - siz[y]) * val;
		dfs2(y, x); 
	}
} 
int main(){
	scanf("%d", &n);
	for(int i = 1; i <= n; ++i){
		scanf("%d", &c[i]);
	}
	for(int i = 1; i < n; ++i){
		scanf("%d%d%d", &u, &v, &w);
		d[u].push_back(make_pair(v, w));
		d[v].push_back(make_pair(u, w));
	}
	dfs(1, 0);
	dfs2(1, 0);
	for(int i = 1; i <= n; ++i) minn = min(minn, dp[i]);
	printf("%lld\n", minn);
} 

lz 晚点回复,感谢!

2022/4/28 14:01
加载中...