제출 #1370318

#제출 시각아이디문제언어결과실행 시간메모리
1370318FaresSTHSjekira (COCI20_sjekira)C++20
0 / 110
65 ms18164 KiB
#include"bits/stdc++.h"
using namespace std;
using ll=long long;
#define S second
#define F first
const int mxn=1e5+5;
set<pair<int,int>>g[mxn];
int p[mxn],sz[mxn];
ll mx[mxn],res;
int fp(int i){
    if(i==p[i])return i;
    return fp(p[i]);
}
void mrg(int a,int b){
    a=fp(a),b=fp(b);
    res+=mx[a]+mx[b];
    if(sz[a]<sz[b])swap(a,b);
    mx[a]=max(mx[a],mx[b]);
    sz[a]+=sz[b];
    p[b]=a;
}
int main(){
    cin.tie(0)->sync_with_stdio(0);
    int n;
    cin>>n;
    int a[n+1];
    set<pair<int,int>>s;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        p[i]=i;
        sz[i]=1;
        mx[i]=a[i];
        s.insert({a[i],i});
    }
    for(int i=1,u,v;i<n;i++){
        cin>>u>>v;
        g[u].insert({a[v],v});
        g[v].insert({a[u],u});
    }
    while(s.size()){
        auto i=s.begin()->S;
        s.erase(s.begin());
        for(auto j:g[i]){
            g[j.S].erase({a[i],i});
            mrg(i,j.S);
        }
        // cout<<i<<' '<<res<<endl;
    }
    cout<<res;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…