fork download
/// Author : Nguyễn Thái Sơn - K18 - KHMT - UIT
/// Training ICPC 2024

#include<bits/stdc++.h>

/// #pragma GCC optimize("O3,unroll-loops")
/// #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")

#define fi first
#define se second
#define TASK "test"
#define pb push_back
#define EL cout << endl
#define Ti20_ntson int main()
#define in(x) cout << x << endl
#define all(x) (x).begin(),(x).end()
#define getbit(x, i) (((x) >> (i)) & 1)
#define cntbit(x) __builtin_popcount(x)
#define FOR(i,l,r) for (int i = l; i <= r; i++)
#define FORD(i,l,r) for (int i = l; i >= r; i--)
#define Debug(a,n) for (int i = 1; i <= n; i++) cout << a[i] << " "; cout << endl

using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef pair<int,int> vii;
typedef unsigned long long ull;
typedef vector<vector<int>> vvi;
int fastMax(int x, int y) { return (((y-x)>>(32-1))&(x^y))^y; }

const int N = 5e5 + 5;
const int oo = INT_MAX;
const int mod = 1e9 + 7;
const int d4x[4] = {-1, 0, 1, 0} , d4y[4] = {0, 1, 0, -1};
const int d8x[8] = {-1, -1, 0, 1, 1, 1, 0, -1}, d8y[8] = {0, 1, 1, 1, 0, -1, -1, -1};

int n, a[N], u[N], v[N], dc[N], b[N];
set<int> dd[N];

inline void Read_Input() {
    cin >> n;
    FOR(i, 1, n)
        cin >> dc[i];
    FOR(i, 1, n - 1) {
        cin >> u[i] >> v[i];
        dd[u[i]].insert(v[i]);
        dd[v[i]].insert(u[i]);
    }
}

inline int find_mx(int u, int p) {
    int Ans = u;
    for (int v : dd[u])
        if (v != p) {
            int t = find_mx(v, u);
            if (dc[t] > dc[Ans]) Ans = t;
        }
    return Ans;
}

inline int Calc(int u) {
    int Sum = 0;
    int mx = find_mx(u, u);
    /// Tim duoc dinh lon nhat
    /// cat cac canh noi voi no
//    cout << "CALC " << u << " " << mx << endl;
    for (int v : dd[mx]) {
        /// mx - v
        Sum += dc[mx];
        /// Xoa canh mx - v di
        dd[v].erase(mx);
        Sum += dc[find_mx(v, v)];
        /// Tim dap an cho cay con moi duoc sinh ra
        Sum += Calc(v);
    }
    dd[mx].clear();
    return Sum;
}

inline void Solve() {
    cout << Calc(1);
}

Ti20_ntson {
//    freopen(TASK".INP","r",stdin);
//    freopen(TASK".OUT","w",stdout);
    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    int T = 1;
//    cin >> T;
    while (T -- ) {
        Read_Input();
        Solve();
    }
}


Success #stdin #stdout 0.01s 28880KB
stdin
Standard input is empty
stdout
Standard output is empty