诡异80分求调
查看原帖
诡异80分求调
989997
DGL__DGL_AFO楼主2024/8/31 08:16

wa #9 #10

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
ll c[114514],w[114514],z[114514];
int h[114514],e[214514],ne[214514],idx;
ll f[114514],ans,res;
int st[114514];

inline void add(int a,int b,int c)
{
	idx++;
	ne[idx]=h[a];
	e[idx]=b;
	w[idx]=c;
	h[a]=idx;
}

inline ll dfs(int x,ll op)
{
	ll cnt=0;
	st[x]=1;
	for(int i=h[x];i;i=ne[i])
	{
		int y=e[i];
		if(!st[y])
		{
			z[x]+=dfs(y,op+w[i]);
			
		}
	}
	z[x]+=c[x];
	f[1]+=op*c[x];
	return z[x];
}

inline void fdfs(int x)
{
	st[x]=1;
	for(int i=h[x];i;i=ne[i])
	{
		int y=e[i];
		if(!st[y])
		{
			f[y]=f[x]-z[y]*w[i]+(res-z[y])*w[i];
			ans=min(ans,f[y]);
			fdfs(y);
		}
	}
}

int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>c[i];
		res+=c[i];
	}
	  
	  
	for(int i=1;i<=n-1;i++)  
	{
		int a,b,c;
		cin>>a>>b>>c;
		add(a,b,c);
		add(b,a,c);	
		
	}
	//cout<<res<<' ';
	st[1]=1;
	for(int i=h[1];i;i=ne[i])
	{
		int y=e[i];
		z[1]+=dfs(y,w[i]);
	}
	z[1]+=c[1];
	ans=f[1];
	memset(st,0,sizeof st);
	st[1]=1;
	for(int i=h[1];i;i=ne[i])
	{
		int y=e[i];
		f[y]=f[1]-z[y]*w[i]+(res-z[y])*w[i];
		ans=min(ans,f[y]);
		fdfs(y);
		//cout<<y<<' '<<f[y]<<' '<<z[y]<<' '<<w[i]<<' '<<res<<'\n';
	}
	//for(int i=1;i<=n;i++)
	  //cout<<f[i]<<' ';
	cout<<ans;
	//cout<<z[2]<<" "<<z[4];
	return 0;
}
2024/8/31 08:16
加载中...