Pagini recente » Cod sursa (job #2546625) | Cod sursa (job #330705) | Cod sursa (job #2437403) | Cod sursa (job #573673) | Cod sursa (job #2817233)
#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;
}