Pagini recente » Cod sursa (job #1964487) | Cod sursa (job #576207) | Cod sursa (job #3349671) | Cod sursa (job #3354686) | Cod sursa (job #3312465)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f ("asmax.in");
ofstream g ("asmax.out");
const int NMAX = 16000;
int n, V[NMAX+1], D[NMAX+1], maxi = -1e9;
vector<int> G[NMAX+1];
void citire() {
f >> n;
for (int i=1; i<=n; i++)
f >> V[i];
int x, y;
for (int i=1; i<n; i++) {
f >> x >> y;
G[x].push_back(y);
G[y].push_back(x);
}
}
void DFS(int nod, int tata) {
D[nod] = V[nod];
//
for (const auto &x : G[nod])
if (x != tata) {
DFS(x, nod);
D[nod] += max(D[x], 0);
}
//
maxi = max(maxi, D[nod]);
}
int main(){
citire();
DFS(1, 0);
g << maxi;
//
f.close();
g.close();
return 0;
}