Pagini recente » Cod sursa (job #2048124) | Cod sursa (job #1243068) | Cod sursa (job #319099) | Cod sursa (job #989928) | Cod sursa (job #1492538)
#include <cstdio>
#include <vector>
#define NMAX 16007
#define inf -2000000007
using namespace std;
int n, bst[NMAX], maxn = inf, tmp1, tmp2;
vector <int> adj[NMAX];
void dfs(int nod, int tata)
{
//printf("check %d tata = %d\n", nod, tata);
int sze = adj[nod].size();
//printf("nod = %d sze = %d\n", nod, sze);
for(int i = 0; i< sze; ++i)
{
//printf("check1 %d tata = %d %d\n", nod, tata, adj[nod][i]);
if(adj[nod][i] == tata) continue;
//printf("check2 %d tata = %d %d\n", nod, tata, adj[nod][i]);
dfs(adj[nod][i], nod);
if(bst[adj[nod][i]] > 0) bst[nod] += bst[adj[nod][i]];
}
if(bst[nod] > maxn) maxn = bst[nod];
}
int main()
{
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
scanf("%d", &n);
for(int i = 1; i<= n; ++i) scanf("%d", &bst[i]);
for(int i = 1; i< n; ++i)
{
scanf("%d %d", &tmp1, &tmp2);
adj[tmp1].push_back(tmp2);
adj[tmp2].push_back(tmp1);
}
dfs(1, -1);
printf("%d\n", maxn);
//for(int i = 1; i<= n; ++i) printf("%d ", bst[i]);
//printf("\n");
return 0;
}