Pagini recente » Cod sursa (job #1937399) | Cod sursa (job #2468960) | Cod sursa (job #1781606) | Cod sursa (job #1587907) | Cod sursa (job #1584423)
#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;}
s[0] = 0;
while(!Q.empty()){
i = Q.front();
Q.pop();
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;
}