제출 #630166

#제출 시각아이디문제언어결과실행 시간메모리
630166Hacv16Sjekira (COCI20_sjekira)C++17
0 / 110
65 ms53236 KiB
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; const int MAX = 2e6 + 15; const int INF = 0x3f3f3f3f; const int MOD = 1e9 + 7; #define pb push_back #define sz(x) (int) x.size() #define fr first #define sc second #define mp make_pair #define all(x) x.begin(), x.end() #define dbg(x) cerr << #x << ": " << "[ " << x << " ]\n" ll n, t[MAX], pai[MAX], mark[MAX], mx[MAX], sze[MAX], ans; vector<ll> adj[MAX]; ll find(ll u){ if(pai[u] == u) return u; return pai[u] = find(pai[u]); } void join(ll u, ll v){ u = find(u), v = find(v); if(u == v) return; if(sze[v] > sze[u]) swap(u, v); pai[v] = u, sze[u] += sze[v], mx[u] = max(mx[u], mx[v]); } ll getMax(ll u){ return mx[find(u)]; } bool cmp(int u, int v){ return t[u] < t[v]; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n; for(int i = 1; i <= n; i++) cin >> t[i]; for(int i = 1; i < n; i++){ ll u, v; cin >> u >> v; adj[u].pb(v); adj[v].pb(u); } for(int i = 1; i <= n; i++) sort(all(adj[i]), cmp); for(int i = 1; i <= n; i++) pai[i] = i, mx[i] = t[i], sze[i] = 1; vector<int> order(n); iota(all(order), 1); sort(all(order), cmp); for(auto u : order){ for(auto v : adj[u]){ if(mark[v]) continue; ans += getMax(u); ans += getMax(v); join(u, v); } mark[u] = true; } cout << ans << '\n'; 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...