Pagini recente » Cod sursa (job #1335301) | Cod sursa (job #2877704) | Cod sursa (job #172102) | Cod sursa (job #1444735) | Cod sursa (job #1488858)
#include <fstream>
#include <vector>
using namespace std;
#define NMAX 16010
int N;
int val[NMAX], sum[NMAX];
bool viz[NMAX];
vector<int> G[NMAX];
ifstream fin ("asmax.in");
ofstream fout ("asmax.out");
void dfs (int nod) {
viz[nod] = 1;
sum[nod] = val[nod];
for (int i = 0; i < G[nod].size (); i++) {
if ( !viz[G[nod][i]]) {
dfs (G[nod][i]);
if (sum[G[nod][i]] > 0) {
sum[nod] += sum[G[nod][i]];
}
}
}
}
int main () {
fin >> N;
for (int i = 1; i <= N; i++) {
fin >> val[i];
}
int A, B;
for (int i = 1; i <= N; i++) {
fin >> A >> B;
G[A].push_back (B);
G[B].push_back (A);
}
dfs (1);
int maxSum = -1000;
for (int i = 1; i <= N; i++) {
if (sum[i] > maxSum) {
maxSum = sum[i];
}
}
fout << maxSum << '\n';
return 0;
}