Submission #364762

#TimeUsernameProblemLanguageResultExecution timeMemory
364762MohamedAhmed04Sjekira (COCI20_sjekira)C++14
110 / 110
93 ms10856 KiB
#include <bits/stdc++.h> using namespace std ; const int MAX = 1e5 + 10 ; int arr[MAX] ; int n ; vector< vector<int> >adj(MAX) ; vector< pair<int , int> >vp ; int par[MAX] , sz[MAX] , val[MAX] ; int mark[MAX] ; void init() { for(int i = 1 ; i <= n ; ++i) par[i] = i , sz[i] = 1 , val[i] = arr[i] ; } int root(int node) { if(par[node] == node) return node ; return (par[node] = root(par[node])) ; } void Union(int x , int y) { int a = root(x) ; int b = root(y) ; if(sz[a] < sz[b]) swap(a , b) ; par[b] = a ; sz[a] += sz[b] ; val[a] = max(val[a] , val[b]) ; } int main() { ios_base::sync_with_stdio(0) ; cin.tie(0) ; cin>>n ; for(int i = 1 ; i <= n ; ++i) { cin>>arr[i] ; vp.emplace_back(arr[i] , i) ; } for(int i = 0 ; i < n-1 ; ++i) { int x , y ; cin>>x>>y ; adj[x].push_back(y) ; adj[y].push_back(x) ; } init() ; sort(vp.begin() , vp.end()) ; long long ans = 0 ; for(auto &p : vp) { int node = p.second ; mark[node] = 1 ; for(auto &child : adj[node]) { if(mark[child]) ans += arr[node] + val[root(child)] ; } for(auto &child : adj[node]) { if(mark[child]) Union(node , child) ; } } return cout<<ans<<"\n" , 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...