Submission #1154024

#TimeUsernameProblemLanguageResultExecution timeMemory
1154024yhkhooSjekira (COCI20_sjekira)C++20
110 / 110
25 ms2376 KiB
#include <bits/stdc++.h>
using namespace std;

typedef pair<int, int> pii;
#define fi first
#define se second

const int MAXN = 100005;

int p[MAXN], g[MAXN], t[MAXN];

int par(int u){
    if(p[u] == u) return u;
    p[u] = par(p[u]);
    return p[u];
}

int onion(int u, int v){
    u = par(u); v = par(v);
    assert(u != v);
    if(v > u) swap(u, v);
    int ret = g[u] + g[v];
    g[v] = max(g[v], g[u]);
    p[u] = v;
    return ret;
}

int main(){
    cin.tie(0); ios_base::sync_with_stdio(0);
    int n;
    cin >> n;
    for(int i=0; i<n; i++){
        p[i] = i;
        cin >> t[i];
        g[i] = t[i];
    }
    pii a[n-1];
    for(int i=0, x, y; i<n-1; i++){
        cin >> a[i].fi >> a[i].se;
        a[i].fi--; a[i].se--;
    }
    sort(a, a+n-1, [](const pii &a, const pii &b){
        return max(t[a.fi], t[a.se]) < max(t[b.fi], t[b.se]);
    });
    long long ans = 0;
    for(int i=0; i<n-1; i++){
        ans += onion(a[i].fi, a[i].se);
    }
    cout << ans;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...