Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Istoria paginii utilizator/alex_mustaine | Diferente pentru utilizator/fr3ddy intre reviziile 3 si 1 | Cod sursa (job #3209968)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("asmax.in");
ofstream g("asmax.out");
const int NMAX = 16001;
int v[NMAX], val[NMAX], rez = -16000 * 1000;
vector<int> v2[NMAX];
void dfs(int nod, int t) {
val[nod] += v[nod];
for (int i : v2[nod]) {
if (i != t) {
dfs(i, nod);
if (val[i] > 0) {
val[nod] += val[i];
}
}
}
rez = max(rez, val[nod]);
}
int main() {
int n;
f >> n;
for (int i = 1; i <= n; i++)
f >> v[i];
for (int i = 1; i < n; i++) {
int x, y;
f >> x >> y;
v2[x].push_back(y);
v2[y].push_back(x);
}
dfs(1, 0);
g << rez;
return 0;
}