제출 #1283332

#제출 시각아이디문제언어결과실행 시간메모리
1283332diep38Sjekira (COCI20_sjekira)C++20
110 / 110
33 ms5124 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long

#define pb push_back
#define irs insert
#define ed "\n"
#define fi first
#define se second
#define pi pair<int,int>
#define pii pair<int,pair<int,int>>
#define fis(i,a,b) for(int i=a;i<=b;++i)
#define fl(i,a,b) for(int i=a;i>=b;--i)
#define BIT(mask,i) (((mask)>>(i))&1ll)
const int mod=1e9+7;
const int Mdem=998244353;
const int LOG=19;
const int base=31;
const int maxn=1e5+5;
#define fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define gay(a) freopen(a".inp","r",stdin),freopen(a".out","w",stdout)
template <class T>
bool minimize(T &a, const T &b) {
    if(a > b) {a = b; return 1;}
    return 0;
}

template <class T>
bool maximize(T &a, const T &b) {
    if(a < b) {a = b; return 1;}
    return 0;
}
void add(int &a, int b) {   a += b; if (a >= mod)   a -= mod;   }
void sub(int &a, int b) {   a -= b; if (a <  0)     a += mod;   }
int Size[maxn],pa[maxn],t[maxn];
int mx[maxn];
pi a[maxn];
int ans=0;
int n;
int Find(int u){
    if(u==pa[u]) return u;
    return pa[u]=Find(pa[u]);
}
void Union(int u,int v){
    u=Find(u);
    v=Find(v);
    if(u!=v){
        if(Size[u]<Size[v]) swap(u,v);
        ans+=mx[u]+mx[v];
        mx[u]=max(mx[u],mx[v]);
        pa[v]=u;
        Size[u]+=Size[v];
    }
}
bool cmp(pi x,pi y){
    int a=max(t[x.fi],t[x.se]);
    int b=max(t[y.fi],t[y.se]);
    return a<b;
}
signed main(){

    fast;
    cin>>n;
    fis(i,1,n)
    {
        cin>>t[i];
        pa[i]=i;
        Size[i]=1;
        mx[i]=t[i];
    }
    fis(i,1,n-1){
        int u,v; cin>>u>>v;
        a[i]={u,v};
    }
    sort(a+1,a+n,cmp);
    for(int i=1;i<=n-1;i++){
        Union(a[i].fi,a[i].se);
    }
    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...