Pagini recente » Cod sursa (job #869404) | Cod sursa (job #845650) | Cod sursa (job #1025220) | Cod sursa (job #2348161) | Cod sursa (job #913149)
Cod sursa(job #913149)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("asmax.in"); ofstream g("asmax.out");
const int oo = 10000;
const int NMAX = 16009;
int n, x, y, maxim = -oo, sum[NMAX];
vector <int> v[NMAX];
vector <int> a;
inline void read_Data() {
f >> n;
a.push_back(0);
for(int i = 1; i <= n; ++i) f >> x, a.push_back(x);
for(int i = 1; i <= n - 1; ++i) {
f >> x >> y;
v[x].push_back(y);
v[y].push_back(x);
}
}
inline void init() {
for(int i = 1; i <= n; ++i) sum[i] = -oo;
}
void DFS(int nod) {
sum[nod] = a[nod];
int vecin;
for(int i = 0 ; i < v[nod].size(); ++i) {
vecin = v[nod][i];
if(sum[vecin] == -oo) {
DFS(vecin);
if(sum[vecin] + sum[nod] > sum[nod]) sum[nod] += sum[vecin];
}
}
if(maxim < sum[nod]) maxim = sum[nod];
}
int main() {
read_Data();
init();
DFS(1);
g << maxim << '\n';
g.close();
f.close();
return 0;
}