Pagini recente » Cod sursa (job #2471509) | Cod sursa (job #417927) | Cod sursa (job #173169) | Cod sursa (job #1812929) | Cod sursa (job #3200503)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin ( "asmax.in" );
ofstream fout ( "asmax.out" );
const int N = 20000;
vector <int> g[N];
int dp[N], viz[N];
int ans;
void dfs ( int node ) {
viz[node] = 1;
for ( int i = 0; i < g[node].size(); i++ ) {
if ( viz[g[node][i]] == 0 ) {
dfs ( g[node][i] );
dp[node] += max ( 0, dp[g[node][i]] );
}
}
ans = max ( ans, dp[node] );
}
int main () {
int n;
int a, b;
fin >> n;
for ( int i = 1; i <= n; i++ )
fin >> dp[i];
for ( int i = 1; i < n; i++ ) {
fin >> a >> b;
g[a].push_back (b);
g[b].push_back (a);
}
dfs (1);
fout << ans;
return 0;
}