Submission #1154062

#TimeUsernameProblemLanguageResultExecution timeMemory
1154062justin271828Sjekira (COCI20_sjekira)C++20
0 / 110
55 ms6212 KiB
#include <bits/stdc++.h>
using namespace std;

#define l2 long long
#define li pair<l2, int>
#define f first
#define s second

int main() {
  int n;
  cin >> n;
  li arr[n];
  l2 mem[n];
  for (int i = 0; i < n; i++) {
    cin >> arr[i].f;
    mem[i] = arr[i].f;
    arr[i].s = i;
  }
  sort(arr, arr+n);
  vector<int> v[n];
  for (int i = 1; i < n; i++) {
    int a, b;
    cin >> a >> b;
    a--;
    b--;
    if (mem[a] < mem[b] || (mem[a] == mem[b] && a < b)) v[a].push_back(b);
    else v[b].push_back(a);
  }
  int ufds[n];
  for (int i = 0; i < n; i++) ufds[i] = i;
  int ans = 0;
  for (li p: arr) {
    for (int k: v[p.s]) {
      int a = p.s;
      int b = k;
      int da = 0;
      int db = 0;
      while (a != ufds[a]) {
        a = ufds[a];
        da++;
      }
      while (b != ufds[b]) {
        b = ufds[b];
        db++;
      }
      ans += mem[a];
      ans += mem[b];
      if (da < db) {
        mem[b] = max(mem[a], mem[b]);
        ufds[a] = ufds[b];}
      else {
        mem[a] = max(mem[a], mem[b]);
        ufds[b] = ufds[a];}
    }
  }
  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...