Pagini recente » Cod sursa (job #449929) | Cod sursa (job #2321279) | Cod sursa (job #2848757) | Cod sursa (job #2742079) | Cod sursa (job #961787)
Cod sursa(job #961787)
#include <cstdio>
#include <vector>
using namespace std;
const int DMAX = 16003;
vector <int> AD[DMAX];
int V[DMAX], S[DMAX];
bool viz[DMAX];
void DFS (int nod) {
viz[nod] = 1;
S[nod] = V[nod];
for (int i = 0; i < AD[nod].size(); ++i)
if (!viz[AD[nod][i]]) {
DFS (AD[nod][i]);
if (S[AD[nod][i]] > 0)
S[nod] += S[AD[nod][i]];
}
}
int main () {
freopen ("asmax.in", "r", stdin);
freopen ("asmax.out", "w", stdout);
int N, a, b, i, M;
scanf ("%d", &N);
for (i = 1; i <= N; ++i)
scanf ("%d", &V[i]);
for (i = 1; i < N; ++i)
scanf ("%d%d", &a, &b),
AD[a].push_back(b),
AD[b].push_back(a);
DFS (1);
M = S[1];
for (i = 2; i <= N; ++i)
if(S[i] > M)
M = S[i];
printf ("%d", M);
}