Pagini recente » Cod sursa (job #1746844) | Cod sursa (job #1048237) | Cod sursa (job #967057) | Cod sursa (job #516165) | Cod sursa (job #3342910)
#include <iostream>
#include <fstream>
#include <vector>
#include <bitset>
using namespace std;
const int maxn = 16001;
int n, val[maxn];
vector<int> g[maxn];
bitset<maxn> viz;
int sumMax[maxn];
void dfs(int nod) {
viz[nod] = true;
sumMax[nod] = val[nod];
for (int j = 0; j < g[nod].size(); ++j) {
int vecin = g[nod][j];
if(!viz[vecin]) {
dfs(vecin);
if (sumMax[nod] + sumMax[vecin] > sumMax[nod])
sumMax[nod] += sumMax[vecin];
}
}
}
int main(){
ifstream in("asmax.in");
ofstream out("asmax.out");
in >> n;
for (int i = 1; i <= n; ++i)
in >> val[i];
int x, y;
for (int i = 1; i <= n - 1; ++i) {
in >> x >> y;
g[x].push_back(y);
g[y].push_back(x);
}
dfs(1);
int maxim = -16000005;
for (int i = 1; i <= n; ++i)
if (sumMax[i] > maxim)
maxim = sumMax[i];
out << maxim;
return 0;
}