Pagini recente » Cod sursa (job #866700) | Cod sursa (job #2382351) | Cod sursa (job #2355895) | Cod sursa (job #1102728) | Cod sursa (job #1888824)
#include <cstdio>
#include <vector>
#include <bitset>
using namespace std;
#define N 16001
long long s = -1000, v[N], sum[N];
int a, b, n;
vector <int> vec[N];
bitset <N> viz;
void dfs (int nod)
{
viz[nod] = true;
sum[nod] = v[nod];
for (int i=0; i<vec[nod].size(); i++){
int now = vec[nod][i];
if (viz[now] == false){
dfs (now);
if (sum[now] > 0){
sum[nod] += sum[now];
}
}
}
if (sum[nod] > s){
s = sum[nod];
}
}
int main ()
{
freopen ("asmax.in", "r", stdin);
freopen ("asmax.out", "w", stdout);
scanf ("%d", &n);
for (int i=1; i<=n; i++){
scanf ("%lld", &v[i]);
}
for (int i=1; i<n; i++){
scanf ("%d %d", &a, &b);
vec[a].push_back (b);
vec[b].push_back (a);
}
for (int i=1; i<=n; i++){
if (viz[i] == false){
dfs (i);
}
}
printf ("%lld", s);
return 0;
}