#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
long long t[maxn]; // Changed to long long
int r[maxn];
long long res = 0; // Changed to long long
vector<int> a[maxn];
struct cmp {
int u, v;
long long w; // Changed to long long
};
cmp e[maxn];
bool sapxep(cmp a, cmp b) {
return a.w < b.w;
}
void dsu(int u, int v) {
int ru = r[u];
int rv = r[v];
if (ru != rv) {
if (t[ru] < t[rv]) swap(ru, rv);
res += t[ru] + t[rv];
for (int x : a[rv]) {
a[ru].push_back(x);
r[x] = ru;
}
}
}
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> t[i];
r[i] = i;
a[i].push_back(i);
}
for (int i = 1; i < n; i++) {
int u, v;
cin >> u >> v;
e[i] = {u, v, max(t[u], t[v])}; // max now returns long long
}
sort(e + 1, e + n, sapxep);
for (int i = 1; i < n; i++) {
dsu(e[i].u, e[i].v);
}
cout << res << endl;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |