Pagini recente » Cod sursa (job #2359636) | Cod sursa (job #2531156) | Cod sursa (job #1288871) | Cod sursa (job #2270970) | Cod sursa (job #2673655)
#include <fstream>
#include <vector>
using namespace std;
ifstream in ("asmax.in");
ofstream out ("asmax.out");
void dfs ( int nod );
int n;
vector < int > g[16007];
int val[16137];
int dp[16137];
int viz[16137];
int mx = -2000000000;
int x, y;
int main()
{
in >> n;
for ( int i = 1 ; i <= n ; ++i )
in >> val[i];
for ( int i = 1 ; i < n ; ++i )
{
in >> x >> y;
g[x].push_back (y);
}
for ( int i = 1 ; i <= n ; ++i )
if ( !viz[i] )
dfs (i);
for ( int i = 1 ; i <= n ; ++i )
mx = max ( mx, dp[i] );
out << mx;
return 0;
}
void dfs ( int nod )
{
viz[nod] = true;
dp[nod] = val[nod];
for ( auto i : g[nod] )
if ( !viz[i] )
dfs (i);
for ( auto i : g[nod] )
if ( dp[nod] + dp[i] > dp[nod] )
dp[nod] += dp[i];
}