奇了个大怪,MLE最后两个点(玄关求调,马凤良好)
查看原帖
奇了个大怪,MLE最后两个点(玄关求调,马凤良好)
22716
神仙酱楼主2024/3/19 19:43
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5+10;
int e[N<<1], h[N], nxt[N<<1], w[N], idx=1;
void add(int a, int b, int c){
    e[idx]=b, w[idx] = c, nxt[idx] = h[a], h[a] = idx++;
}

int sz[N], f[N], n;
void dfs(int u, int fa) {
    for(int i=h[u]; i; i= nxt[i]){
        int son = e[i];
        if (son == fa)
            continue;
        dfs(son, u);
        sz[u] += sz[son];
        f[u] += f[son] + sz[son] * w[i];
    }
}

int ans;

void dfs2(int u, int fa){
    for(int i=h[u]; i; i= nxt[i]){
        int son = e[i];
        if (son == fa)
            continue;
        f[son] = f[u] + (sz[1]-2*sz[son]) * w[i];
		ans = min(ans, f[son]);
		dfs2(son, u);
    }
}

signed main() {
    cin>>n;
    for(int i=1;i<=n;++i)
        cin>>sz[i];
    for(int i=1;i<n;++i) {
        int x,y, c;
        cin>>x>>y>>c;
        add(x, y, c), add(y, x, c);
    }
	
    dfs(1, 0);
	ans = f[1];
	dfs2(1, 0);
	cout<<ans;
}

2024/3/19 19:43
加载中...