Submission #876101

#TimeUsernameProblemLanguageResultExecution timeMemory
876101DanetSjekira (COCI20_sjekira)C++14
110 / 110
85 ms7708 KiB
#include<bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O3")

#define tof_io  ios_base::sync_with_stdio(false);cin.tie(0) , cout.tie(0);
#define double  long double
#define int     long long
#define pb      push_back

#define all(x)  x.begin(),x.end()
#define endl    '\n'
#define sz(x) 	x.size()
const int mod = 1e9 + 7; //998244353 1e9+7 1e9+9
const int N = 1e6 + 1;	
const int lg = 23;

const int inf = 1e18;
int fac[N];
int inv[N];
int cnt[N];
int n ;
vector<int> vc;
vector<pair<int, int> > adj;
int ans = 0;
int  dnt_pow	(int a, int b, int md = mod){int ans = 1; while(b){if(b&1){ans = (a*ans)%md;}a = (a*a)%md;b >>= 1;}return ans ;}
void dnt_bld	(){fac[0] = 1; inv[0] = dnt_pow(fac[0],mod-2) ;for(int i = 1 ; i < N ; i++) {fac[i] = (fac[i-1] * i) % mod;inv[i] = dnt_pow( fac[i] , mod-2);}}
int  dnt_ncr	(int r,int n){if(r>n) return 0; return fac[n] * inv[r] % mod * inv[n-r] % mod;}
bool cmp		(pair<int, int> x, pair<int, int> y){return max(cnt[x.first], cnt[x.second]) < max(cnt[y.first], cnt[y.second]);}

int get(int x){return (vc[x] == x ? x : vc[x] = get(vc[x]));}
void merg(int x, int y)
{
	int a = get(x);
	int b = get(y);
	if (a != b)
	{
		vc[a] = b;
		ans = ans + cnt[a];
        ans = ans + cnt[b];
        cnt[b] = max(cnt[b], cnt[a]);
	}

}
int32_t main()
{
	cin >> n;
	vc.pb(0);
	for (int i = 1; i <= n; i++)
	{
		cin >> cnt[i];
		vc.pb(i);
	}
   	for (int i = 1; i < n; i++)
   	{
   		int x, y;
   		cin >> x >> y;
   		adj.pb(make_pair(x,y));
   	}
   	sort(all(adj), cmp);
 
   	for (auto v : adj)
		merg(v.first, v.second);
 
   	cout << ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...