# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1223361 | _rain_ | Sjekira (COCI20_sjekira) | C++20 | 46 ms | 2924 KiB |
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=(int)1e5;
int par[N+2],sz[N+2],mx[N+2];
int t[N+2],u[N+2],v[N+2];
int n;
LL ans=0;
vector<int>edg;
int Find(int u){
return par[u]==u?par[u]:par[u]=Find(par[u]);
}
void unite(int u,int v){
u=Find(u),v=Find(v);
if (u==v) return;
if (sz[u]<sz[v]) swap(u,v);
par[v]=u , sz[u]+=sz[v];
t[u]=max(t[u],t[v]);
return;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0) ; cout.tie(0);
#define task "main"
if (fopen(task".inp","r")){
freopen(task".inp","r",stdin);
freopen(task".out","w",stdout);
}
cin>>n;
for(int i=1;i<=n;++i) sz[i]=1,par[i]=i;
for(int i=1;i<=n;++i) cin>>t[i];
for(int i=1;i<n;++i){
cin>>u[i]>>v[i];
edg.push_back(i);
}
sort(edg.begin(),edg.end(),[&](int x,int y){
return max(t[u[x]],t[v[x]])<max(t[u[y]],t[v[y]]);
});
ans=0;
for(auto&i:edg){
ans+=t[Find(u[i])]+t[Find(v[i])];
unite(u[i],v[i]);
}
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... |