Pagini recente » Cod sursa (job #1579884) | Cod sursa (job #296300) | Cod sursa (job #2763096) | Cod sursa (job #330509) | Cod sursa (job #3264346)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std ;
ifstream cin ("asmax.in") ;
ofstream cout ("asmax.out");
const int MAXN = 16000 ;
int n, m ;
int idx[MAXN + 10], group[MAXN + 10], x[MAXN + 10], y[MAXN + 10], cost[MAXN + 10] ;
int get_group (int x)
{
if (group[x] == x)
return x ;
group[x] = get_group (group[x]);
return group[x] ;
}
void reunion (int x, int y)
{
group[get_group(x)] = get_group(y) ;
}
bool cmp (int x, int y)
{
return (cost[x] > cost[y]) ;
}
int main()
{
int ans = 0 ;
cin >> n ;
for (int i = 1 ; i <= n ; i ++)
cin >> cost[i], idx[i] = i ;
for (int i = 1 ; i < n ; i ++)
cin >> x[i] >> y[i] ;
for (int i = 1 ; i <= n ; i ++)
group[i] = i ;
sort (idx + 1, idx + n + 1, cmp);
for (int i = 1 ; i <= n ; i ++)
{
if (get_group(x[idx[i]]) != get_group(y[idx[i]]))
{
ans += cost[idx[i]] ;
reunion(x[idx[i]], y[idx[i]]) ;
}
}
cout << ans ;
return 0 ;
}