Cod sursa(job #2817233)

Utilizator mateitudordmDumitru Matei mateitudordm Data 13 decembrie 2021 12:07:46
Problema Heavy Path Decomposition Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <bits/stdc++.h>

using namespace std;

int greu[100001], w[100001], f[100001], label[100001], freelabel = 2;
vector<int> ad[100001];
void cmp ( int a, int b )
{
    return w[a] > w[b];
}
void dfsweight ( int nod )
{
    int ok = 0;
    f[nod] = 1;
    for ( auto i : ad[nod] )
        if ( f[i] == 0 )
            ok = 1, dfs ( i );
    if ( ok == 0 )
        w[nod] = 1;
    else
        for ( auto i : ad[nod] )
            w[nod] += w[i];
}
void dfslabel ( int nod )
{
    f[i] = 1;
    label[ad[nod][0]] = label[nod];
    for ( auto i : ad[nod] )
        if ( i != ad[nod][0] )
            label[i] = freelabel--;
    for ( auto i : ad[nod] )
        if ( f[i] == 0 )
            dfs ( i );
}

int main()
{
    int n, m, a, b, i;
    cin >> n >> m;
    for ( i = 1; i <= n; i++ )
        cin >> greu[i];
    for ( i = 0 ; i < n - 1; i++ )
    {
        cin >> a >> b;
        ad[a].push_back ( b );
        ad[b].push_back ( a );
    }
    dfsweight ( 1 );
    for ( i = 1; i <= n; i++ )
        f[i] = 0, sort ( ad[i].begin(), ad[i].end(), cmp );
    label[1] = 1;
    dfslabel ( 1 );
    return 0;
}