Pagini recente » Cod sursa (job #1058232) | Istoria paginii runda/leulloe/clasament | Cod sursa (job #2620199) | Istoria paginii runda/14_martie_simulare_oji_2024_clasa_9/clasament | Cod sursa (job #2072384)
#include <bits/stdc++.h>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
int cost[16009],n, sum, maxim = - 1<<30;
vector < int > v[16000];
bitset < 16009 > viz;
int tata[16009];
void read()
{
in >> n;
for ( int i=1; i<=n; i++)
in >> cost[i];
int a,b;
for(int i=1; i<n; i++)
{
in >> a >> b;
v[a].push_back(b);
v[b].push_back(a);
}
}
void dfs( int nod )
{
viz[nod] = 1;
for( int i=0; i<v[nod].size(); i++)
{
if ( !viz[v[nod][i]]) dfs(v[nod][i]);
if( cost[v[nod][i]] > 0 && v[nod][i] != tata[nod] ) cost[ tata[ v[nod][i] ]] += cost[v[nod][i]];
maxim = max(maxim, cost[nod]);
}
}
void dfs1( int nod )
{
viz[nod] = 1;
for(int i=0; i<v[nod].size(); i++)
if( !viz[ v[nod][i] ] ) tata[ v[nod][i] ] = nod, dfs1(v[nod][i]);
}
int main()
{
read();
dfs1(1);
viz.reset();
dfs(1);
out << maxim;
return 0;
}