Submission #1287657

#TimeUsernameProblemLanguageResultExecution timeMemory
1287657MinhKienSjekira (COCI20_sjekira)C++20
110 / 110
28 ms2612 KiB
#include <algorithm> #include <iostream> using namespace std; const int N = 1e5 + 10; int n, a[N]; struct edge { int x, y; void inp() { cin >> x >> y; } bool operator < (const edge &o) const { return max(a[x], a[y]) < max(a[o.x], a[o.y]); } } e[N]; long long ans; struct DSU { int par[N]; long long mx[N]; void start() { for (int i = 1; i <= n; ++i) { par[i] = -1; mx[i] = a[i]; } } int FindPar(int u) { return par[u] < 0 ? u : par[u] = FindPar(par[u]); } void unite(int u, int v) { u = FindPar(u); v = FindPar(v); if (par[u] > par[v]) swap(u, v); ans += mx[u] + mx[v]; par[u] += par[v]; par[v] = u; mx[u] = max(mx[u], mx[v]); } } dsu; int main() { // freopen("SJEKIRA.INP", "r", stdin); // freopen("SJEKIRA.OUT", "w", stdout); cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(false); cin >> n; for (int i = 1; i <= n; ++i) cin >> a[i]; for (int i = 1; i < n; ++i) e[i].inp(); sort(e + 1, e + n); dsu.start(); for (int i = 1; i < n; ++i) { dsu.unite(e[i].x, e[i].y); } 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...