# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1244827 | CrabCNH | Sjekira (COCI20_sjekira) | C++20 | 44 ms | 11076 KiB |
#include <bits/stdc++.h>
#define int long long
#define pii pair<int, int>
#define fi first
#define se second
using namespace std;
const int N = 1e5 + 5;
int a[N];
void read() {
#define task "KB"
if (fopen(task".inp", "r")) {
freopen(task".inp", "r", stdin);
freopen(task".out", "w", stdout);
}
}
struct edge {
int u, v, c;
};
struct node {
int id, val;
};
bool cmpnode (node A, node B) {
return A.val < B.val;
}
bool cmpedge(edge a, edge b) {
return a.c > b.c;
}
int n;
int sz[N + 5], par[N + 5];
int tt[N];
vector<edge> edges;
vector <int> adj[N];
int mx[N + 5];
node t[N];
void init(int n) {
for (int i = 1; i <= n; i++) {
par[i] = -1;
sz[i] = 1;
mx[i] = t[i].val;
}
}
int getroot(int u) {
if (par[u] < 0) {
return u;
}
return par[u] = getroot(par[u]);
}
bool check(int u, int v) {
return getroot(u) == getroot(v);
}
bool join(int u, int v) {
u = getroot(u);
v = getroot(v);
if (u == v) {
return 0;
}
if (sz[u] < sz[v]) {
swap(u, v);
}
sz[u] += sz[v];
par[v] = u;
mx[u] = max (mx[v], mx[u]);
mx[v] = max (mx[v], mx[u]);
return 1;
}
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for (int i = 1; i <= n; i ++) {
cin >> t[i].val;;
t[i].id = i;
tt[i] = t[i].val;
}
init(n);
for (int i = 1; i <= n - 1; i++) {
int u, v;
cin >> u >> v;
adj[u].push_back (v);
adj[v].push_back (u);
}
int ans = 0;
sort (t + 1, t + n + 1, cmpnode);
for (int i = 1; i <= n; i ++) {
int cur_node = t[i].id;
int cur_val = t[i].val;
for (auto v : adj[cur_node]) {
if (check (cur_node, v) == 1 || mx[getroot (v)] > mx[getroot (cur_node)]) {
continue;
}
else {
ans += mx[getroot (cur_node)] + mx[getroot (v)];
join (cur_node, v);
}
}
}
cout << ans;
return 0;
}
Compilation message (stderr)
# | 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... |