Pagini recente » Cod sursa (job #1498602) | Istoria paginii runda/runda_ezoterica_1 | Cod sursa (job #2134112) | Istoria paginii utilizator/carolina.porcescu | Cod sursa (job #1378939)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
int v[16005][16005], c[16005], viz[16005], s[16005];
void dfs(int x) {
viz[x] = 1;
s[x] = c[x];
for(int i = 1; i <= v[x][0]; i++) {
int vecin = v[x][i];
if(!viz[vecin]) {
dfs(vecin);
s[x] = max(s[x], s[x] + s[vecin]);
}
}
}
int main()
{
int i, n, x, y;
in >> n;
for(i = 1; i <= n; i++) {
in >> c[i];
}
for(i = 1; i < n; i++) {
in >> x >> y;
v[x][0]++;
v[x][v[x][0]] = y;
v[y][0]++;
v[y][v[y][0]] = x;
}
dfs(1);
sort(s + 1, s + n + 1);
out << s[n] << "\n";
in.close();
out.close();
return 0;
}