Pagini recente » Cod sursa (job #2974911) | Cod sursa (job #1840573) | Cod sursa (job #1098965) | Cod sursa (job #16426) | Cod sursa (job #569992)
Cod sursa(job #569992)
#include<fstream>
#include<cstdio>
#include<vector>
#include<iostream>
#define pb push_back
#define MaxN 16005
using namespace std;
int n,m,v[MaxN],dp[MaxN],viz[MaxN];
vector <int> G[MaxN];
int sol = -0x3f3f3f3f;
void dfs(int nod)
{
if( !viz[nod] )
{
viz[nod] = 1;
vector<int>::iterator it;
for( it = G[nod].begin() ; it < G[nod].end() ; it++ )
{
if( !viz[*it] )
{
dfs(*it);
if( dp[*it] > 0 )
dp[nod] += dp[*it];
}
if( dp[nod] > sol )
sol = dp[nod];
}
}
}
int main(void)
{
freopen("f.in" , "r" , stdin );
freopen("g.out" , "w" , stdout );
scanf("%d" , &n );
int i,x,y;
for( i = 1 ; i <= n ; dp[i] = v[i] , i++ )
scanf("%d" , &v[i]);
for( i = 1 ; i <= n ; i++ )
{
scanf("%d%d" , &x , &y );
G[x].pb(y);
G[y].pb(x);
}
dfs(1);
printf("%d\n" , sol );
return 0;
}