Pagini recente » Cod sursa (job #695954) | Borderou de evaluare (job #114294) | Cod sursa (job #1003389)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream f("asmax.in");
ofstream g("asmax.out");
const int MAX_N = 16005;
int n, v[MAX_N], dp[MAX_N], rez = -10000;
vector <int> L[MAX_N];
bool used[MAX_N];
void read() {
f >> n;
for (int i = 1; i <= n; i++)
f >> v[i];
for (int i = 1; i <= n + 1; i++) {
int a, b;
f >> a >> b;
L[a].push_back (b);
L[b].push_back (a);
}
}
void dfs (int nod) {
used[nod] = 1;
dp[nod] = v[nod];
for (int i = 0; i < L[nod].size(); i++) {
int fiu = L[nod][i];
if (!used[fiu]) {
dfs (fiu);
if (dp[fiu] > 0)
dp[nod] += dp[fiu];
}
}
}
int main() {
read();
dfs (1);
for (int i = 1; i <= n; i++)
rez = max (rez, dp[i]);
g << rez << '\n';
return 0;
}