Cod sursa(job #3264346)

Utilizator LORDENVraja Luca LORDEN Data 20 decembrie 2024 16:21:03
Problema Asmax Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#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 ;

}