Pagini recente » Cod sursa (job #2458130) | Cod sursa (job #1728812) | Cod sursa (job #2201332) | Cod sursa (job #1862950) | Cod sursa (job #1489540)
#include <stdio.h>
#include <vector>
#define MAX 16005
#define INF -(1<<30)
using namespace std;
int n, a[MAX], i, x, y, d[MAX], parent[MAX];
vector<int> l[MAX];
bool viz[MAX];
void dfs(int node);
int main(){
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
scanf("%d", &n);
for(i = 1; i <= n; i++)
scanf("%d", &a[i]);
for(i = 0; i < n - 1; i++){
scanf("%d%d", &x, &y);
l[x].push_back(y);
l[y].push_back(x);
}
dfs(1);
int max = INF;
for(i = 1; i <= n; i++)
max = max < d[i] ? d[i] : max;
printf("%d\n", max);
return 0;
}
void dfs(int node){
int i;
viz[node] = 1;
d[node] = a[node];
for(i = 0; i < l[node].size(); i++)
if(!viz[l[node][i]]){
parent[l[node][i]] = node;
dfs(l[node][i]);
}
for(i = 0; i < l[node].size(); i++)
if(d[l[node][i]] > 0 && l[node][i] != parent[node])
d[node] += d[l[node][i]];
}