Pagini recente » Cod sursa (job #3243630) | Cod sursa (job #3196838) | Cod sursa (job #2960132) | Cod sursa (job #1716818) | Cod sursa (job #1840680)
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
#define DIM 16005
vector <vector <int> > G;
int cost[DIM], viz[DIM], V[DIM], N;
int DF(int nod) {
viz[nod] = 1;
cost[nod] = V[nod];
for(unsigned int z = 0; z < G[nod].size(); ++z) {
if(viz[G[nod][z]] == 0) {
int rez = DF(G[nod][z]);
cost[nod] = max(cost[nod] + rez, cost[nod]);
}
}
return cost[nod];
}
int main() {
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
scanf("%d\n", &N);
int mxk = 1, pz = -1005;
for(int i = 1; i <= N; ++i) {
scanf("%d", &V[i]);
if(pz < V[i]) {
pz = V[i];
mxk = i;
}
}
G.resize(N + 1);
int x, y;
for(int i = 1; i < N; ++i) {
scanf("%d %d\n", &x, &y);
G[x].push_back(y);
G[y].push_back(x);
}
DF(mxk);
for(int i = 1; i <= N; ++i) {
pz = max(pz, cost[i]);
}
cout << pz << '\n';
return 0;
}