Pagini recente » Cod sursa (job #3273262) | Cod sursa (job #1409216) | Cod sursa (job #1654129) | Cod sursa (job #2699136) | Cod sursa (job #948294)
Cod sursa(job #948294)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
#define in "asmax.in"
#define out "asmax.out"
#define N 16005
#define INF -(1<<30)
typedef unsigned u;
vector <int> graf[N], v(N, 0), din(N);
vector <bool> d (N, 0);
int n, sol = INF, S;
void DFS (int x) {
din[x] = v[x];
d[x] = 1;
for (u i = 0; i < graf[x].size(); ++i) {
if (!d[graf[x][i]]) {
DFS (graf[x][i]);
din[x] += max (din[graf[x][i]], 0);
}
}
}
int main () {
ifstream fin (in);
fin >> n;
int MAX = INF;
for (int i = 1; i <= n; ++i) {
fin >> v[i];
if (v[i] > MAX) {
MAX = v[i];
S = i;
}
}
for (int i = 0; i < n - 1; ++i) {
int x, y;
fin >> x >> y;
graf[x].push_back (y);
graf[y].push_back (x);
}
fin.close();
DFS (S);
for (int i = 1; i <= n; ++i)
sol = max (din[i], sol);
ofstream fout (out);
fout << sol;
fout.close();
return 0;
}