!我的CF1092F代码被吕布的万箭齐发射死了,求调
  • 板块灌水区
  • 楼主guozhe6241
  • 当前回复10
  • 已保存回复10
  • 发布时间2024/8/1 09:03
  • 上次更新2024/8/1 10:27:11
查看原帖
!我的CF1092F代码被吕布的万箭齐发射死了,求调
823122
guozhe6241楼主2024/8/1 09:03

rt

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
inline int read(){
    int x=0,f=1;char c=getchar();
    for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
    for(;isdigit(c);c=getchar()) x=(x<<3)+(x<<1)+c-'0';
    return x*f;
}
inline void write(int x){
    if(x<0) putchar('-'),x=-x;
    if(x>9) write(x/10);
    putchar(x%10+'0');
}
const int maxn=2e5+5;
struct node{
	int to,nxt;
}t[maxn<<1];
int n,tot,sum,idx=1,ans;
int f[maxn],maxs[maxn],s[maxn],a[maxn];
void add(int u,int v){
	t[++tot].to=v;
	t[tot].nxt=f[u];
	f[u]=tot;
}
void dfs1(int fa,int u){
	s[u]=a[u];
	for(int i=f[u];i;i=t[i].nxt){
		if(t[i].to==fa) continue;
		dfs1(u,t[i].to);
		s[u]+=s[t[i].to];
		maxs[u]=max(maxs[u],s[t[i].to]);
	}
	maxs[u]=max(maxs[u],sum-s[u]);
}
void dfs2(int fa,int u){
	for(int i=f[u];i;i=t[i].nxt){
		if(t[i].to==fa) continue;
		s[t[i].to]=s[u]+1;
		dfs2(u,t[i].to);
	}
}
signed main(){
	n=read();
	for(int i=1;i<=n;i++) a[i]=read(),sum+=a[i];
	for(int i=1,u,v;i<n;i++) u=read(),v=read(),add(u,v),add(v,u);
	dfs1(1,1);
	for(int i=2;i<=n;i++) if(maxs[i]<maxs[idx])	idx=i;
	s[idx]=0;
	dfs2(idx,idx);
	for(int i=1;i<=n;i++) ans+=s[i]*a[i];
	cout<<ans<<endl;
	return 0;
}

2024/8/1 09:03
加载中...