Pagini recente » Cod sursa (job #1010409) | Cod sursa (job #1195495) | Cod sursa (job #2634678) | Cod sursa (job #2584876) | Cod sursa (job #2046720)
#include <fstream>
#include <climits>
#include <vector>
#include <queue>
#include <algorithm>
#define MAXN 16004
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
queue <int> Q;
vector <short int> G[MAXN];
int n, cost[MAXN];
inline void Read() {
fin >> n;
int x, y;
for (int i = 1; i <= n; i++) {
fin >> cost[i];
}
for (int i = 1; i <= n - 1; i++) {
fin >> x >> y;
G[x].push_back(y);
G[y].push_back(x);
}
for (int i = 1; i <= n; i++) {
if (G[i].size() == 1)
Q.push(i);
}
}
inline void DP() {
int maxim = INT_MIN, z, x;
while (!Q.empty()) {
z = Q.front();
Q.pop();
if (cost[z] > maxim)
maxim = cost[z];
if (G[z].size() == 0)
continue;
x = G[z].back();
cost[x] = max(cost[x], cost[x] + cost[z]);
G[z].pop_back();
G[x].erase(find(G[x].begin(), G[x].end(), z));
if (G[x].size() == 1)
Q.push(x);
}
fout << maxim;
}
int main () {
Read();
DP();
return 0;
}