Submission #1283332

#TimeUsernameProblemLanguageResultExecution timeMemory
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...