Pagini recente » Cod sursa (job #1641829) | Cod sursa (job #1173586) | Cod sursa (job #2830356) | Cod sursa (job #696842) | Cod sursa (job #181672)
Cod sursa(job #181672)
# include <stdio.h>
# include <cstring>
# include <vector>
using namespace std;
# define input "asmax.in"
# define output "asmax.out"
# define max 16001
# define maxim(a,b) (a>b?a:b)
vector <int> v[max];
int grad[max],x,y,i,j,n;
int a[max],coada[max],st,dr;
int u[max],ret,k;
int main()
{
freopen(input, "r", stdin);
freopen(output, "w", stdout);
scanf("%d",&n);
for(i = 1; i<= n; i++)
scanf("%d ",&a[i]);
for(i = 1; i < n; i++)
{
scanf("%d%d",&x,&y);
v[x].push_back(y);
v[y].push_back(x);
grad[x]++, grad[y]++;
}
for(i = 1; i <= n; i++)
if(grad[i] == 1) coada[++dr] = i,u[i]=1;
ret = -1001;
for(st = 1; st <= dr; st++)
{
i = coada[st];
u[i] = 1;
for( k = 0; k < v[i].size(); k++)
if(!u[v[i][k]]) break;
if(k == v[i].size()) continue;
j = v[i][k];
grad[j]--;
if(grad[j] == 1) coada[++dr] = j;
ret = maxim(ret,a[i]);
if(a[i] > 0) a[j]+=a[i];
ret = maxim(ret,a[j]);
}
printf("%d ",ret);
return 0;
}