Pagini recente » Cod sursa (job #1681352) | Cod sursa (job #143739) | Cod sursa (job #1915974) | Cod sursa (job #1611659) | Cod sursa (job #1584411)
#include <cstdio>
#define nmax 16002
#include <queue>
#include <algorithm>
using namespace std;
int N,t[nmax],d[nmax],s[nmax],rez = 0;
queue <int> Q;
int main(){
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
scanf("%d ",&N);
int i,j,k;
for(i = 1;i <= N;++i){
scanf("%d ",&s[i]);
rez = min(rez,s[i]);
}
for(i = 1;i < N;++i){
scanf("%d %d ",&j,&k);
t[k] = j;
d[j]++;d[k]++;
}
for(i = 1;i <= N;++i)if(d[i] == 1){Q.push(i);d[i] = 0;}
while(!Q.empty()){
i = Q.front();
Q.pop();
if(t[i]){
s[t[i]] = max(s[t[i]],s[t[i]] + s[i]);
d[t[i]]--;
if(d[t[i]] == 1)Q.push(t[i]);
}
rez = max(rez,s[i]);
}
printf("%d\n",rez);
return 0;
}