Pagini recente » Cod sursa (job #3362211) | Cod sursa (job #3362413) | Cod sursa (job #3363319) | Cod sursa (job #1421054) | Cod sursa (job #3362049)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("asmax.in");
ofstream cout("asmax.out");
int X[16005];
int F[16005];
int S[16005];
int R[16005];
struct point {
vector <int> V;
};
point P[16005];
void sum(int poz) {
int maxim=0;
for (int i=0; i<P[poz].V.size(); i++) {
sum(P[poz].V[i]);
if (S[P[poz].V[i]]>=0) maxim=maxim+S[P[poz].V[i]];
}
R[poz]=max(maxim+X[poz], maxim);
S[poz]=maxim+X[poz];
}
int main() {
int n;
cin>>n;
for (int i=1; i<=n; i++) cin>>X[i];
for (int i=1; i<=n-1; i++) {
int x, y;
cin>>x>>y;
P[x].V.push_back(y);
F[y]=1;
}
for (int i=1; i<=n; i++) {
if (F[i]==0) {
sum(i);
break;
}
}
int maxim=0;
for (int i=1; i<=n; i++) maxim=max(maxim, R[i]);
cout<<maxim;
}