Submission #529019

#TimeUsernameProblemLanguageResultExecution timeMemory
529019beepbeepsheepSjekira (COCI20_sjekira)C++17
110 / 110
99 ms16532 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define ii pair<ll,ll> //#define endl '\n' const ll inf=1e15; const ll mod=1e9+7; const ll maxn=1e5+5; ll par[maxn]; multiset<ii> adj[maxn]; priority_queue<ii,vector<ii>,greater<ii>> pq; ll arr[maxn]; ll root(ll x){ if (par[x]==x) return x; return par[x]=root(par[x]); } void connect(ll a, ll b){ ll pa=root(a),pb=root(b); if (pa==pb) return; par[pa]=pb; if (adj[pa].size()>adj[pb].size()) swap(adj[pa],adj[pb]); for (auto u:adj[pa]) adj[pb].emplace(u); adj[pa].clear(); } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); ll n,ele,a,b; cin>>n; for (int i=0;i<n;i++){ par[i+1]=i+1; cin>>ele; arr[i+1]=ele; pq.emplace(ele,i+1); } for (int i=0;i<n-1;i++){ cin>>a>>b; if (arr[a]>arr[b] || (arr[a]==arr[b] && a>b)) swap(a,b); adj[a].emplace(arr[b],b); } ll ans=0,c; while (pq.size()!=1){ a=pq.top().first; b=pq.top().second; pq.pop(); ans+=a+(adj[b].begin()->first); c=adj[b].begin()->second; adj[b].erase(adj[b].begin()); connect(b,c); } 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...