求助大佬Aya
查看原帖
求助大佬Aya
1234924
lsd110504lsd楼主2025/2/6 15:57
#define LOCAL
#include<bits/stdc++.h>
#define int long long

using namespace std;
namespace ly
{
	namespace IO
	{
#ifndef LOCAL
#define SIZE (1<<20)
		char in[SIZE],out[SIZE],*p1=in,*p2=in,*p3=out;
#define getchar() (p1==p2&&(p2=(p1=in)+fread(in,1,SIZE,stdin),p1==p2)?EOF:*p1++)
#define flush() (fwrite(p3=out,1,SIZE,stdout))
#define putchar(ch) (p3==out+SIZE&&flush(),*p3++=(ch))
		class Flush{public:~Flush(){flush();}}_;
#endif
		template<typename type>
		inline void read(type &x)
		{
			x=0;bool flag(0);char ch=getchar();
			while(!isdigit(ch)) flag^=ch=='-',ch=getchar();
			while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
			flag?x=-x:0;
		}
		template<typename type>
		inline void write(type x,bool flag=1)
		{
			x<0?x=-x,putchar('-'):0;static short Stack[50],top(0);
			do Stack[++top]=x%10,x/=10;while(x);
			while(top) putchar(Stack[top--]|48);
			flag?putchar('\n'):putchar(' ');
		}
#ifndef LOCAL
#undef SIZE
#undef getchar
#undef putchar
#undef flush
#endif
	}
}using namespace ly::IO;
int n;
const int N=1e5+10;
vector<int> vis[N];
vector< pair<int,int> > longer[N];
int _size[N],G[N],maxsize[N],pointer;
int ans[N];
inline void dfs(int u,int fa)
{
	_size[u]=1;
	for(int v=0;v<longer[u].size();v++)
	{
		int k=longer[u][v].first;
		if(k==fa)	continue;
		dfs(k,u);
		_size[u]+=_size[k];
		maxsize[u]=max(maxsize[u],_size[k]);
	}
	if(max(maxsize[u],n-maxsize[u])*2<=n)
		pointer=u;
	return ;
}
inline void mindfs(int u,int fa)
{
	for(int v=0;v<longer[u].size();v++)
	{
		int k=longer[u][v].first;
		if(k==fa)
		{
			ans[u]=longer[u][v].second*G[u];
			break;
		}
	}
	for(int v=0;v<longer[u].size();v++)
		{
			int k=longer[u][v].first;
			if(k==fa)	continue;
			mindfs(k,u);
			ans[u]+=ans[k];
			G[u]+=G[k];
		}
	return ;
}
signed main()
{
	read(n);
	for(int i=1;i<=n;i++)
	{
		read(G[i]);
	}
	for(int i=1;i<n;i++)
	{
		int a,b,l;
		read(a),read(b),read(l);
		longer[a].push_back(make_pair(b,l));
		longer[b].push_back(make_pair(a,l));
	}
	dfs(1,0);
	mindfs(pointer,0);
	write(ans[pointer]);
	return 0;
}
2025/2/6 15:57
加载中...