Wa第八个点
查看原帖
Wa第八个点
1242309
Kanyewest楼主2024/5/1 15:33
#include<bits/stdc++.h>
using namespace std;
#define maxn 100005
vector<pair<int,int> >a[maxn];
int c[maxn],n;
long long cnt[maxn],f[maxn],num,sum,ans;
void dfs(int x,int fa,int d){
	cnt[x]=c[x];
	sum+=c[x]*d;
	for(int i=0;i<a[x].size();i++){
		int y=a[x][i].first;
		int len=a[x][i].second;
		if(y==fa)continue;
		dfs(y,x,d+len);
		cnt[x]+=cnt[y];
	}
}
void dfs_(int x,int fa){
	if(sum<ans)ans=sum;
	for(int i=0;i<a[x].size();i++){
		int y=a[x][i].first;
		int len=a[x][i].second;
		if(y==fa)continue;
		sum+=(num-cnt[y])*len-cnt[y]*len;
		dfs_(y,x);
		sum-=(num-cnt[y])*len-cnt[y]*len;
	}
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>c[i];
		num+=c[i];
	}
	for(int i=1;i<n;i++){
		int x,y,z;
		cin>>x>>y>>z;
		a[x].push_back(make_pair(y,z));
		a[y].push_back(make_pair(x,z));
	}
	dfs(1,0,0);
	ans=sum;
	dfs_(1,0);
	cout<<ans;
}
2024/5/1 15:33
加载中...