Pagini recente » Cod sursa (job #463993) | Cod sursa (job #702540) | Cod sursa (job #2854825) | Monitorul de evaluare | Cod sursa (job #2465322)
#include <bits/stdc++.h>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
#define NMAX 16000
vector <int> V[NMAX+5];
int N, viz[NMAX+5], val[NMAX+5], dp[NMAX+5], smax;
void DFS (int node) {
viz[node] = 1;
for (int i = 0; i < V[node].size(); i++) {
int vecin = V[node][i];
if(!viz[vecin]) {
DFS(vecin);
if(dp[vecin] > 0)
dp[node] += dp[vecin];
}
}
}
int main () {
in >> N;
for (int i = 1; i <= N; i++) {
in >> val[i];
dp[i] = val[i];
}
int x,y;
for (int i = 1; i < N; i++) {
in >> x >> y;
V[x].push_back(y);
V[y].push_back(x);
}
DFS(1);
smax = dp[1];
for (int i = 2; i <= N; i++)
if(dp[i] > smax)
smax = dp[i];
out << smax;
}