Pagini recente » Cod sursa (job #3144816) | Cod sursa (job #1743172) | Cod sursa (job #318067) | Cod sursa (job #2320666) | Cod sursa (job #2209490)
#include <iostream>
#include <fstream>
using namespace std;
#define N 32002
ifstream in("asmax.in");
ofstream out("asmax.out");
int xd[N];
int g[N];
int a[N], b[N], c[N];
bool v[N];
int q[N];
int nr=0,k=0;
void add(int x, int y){
a[++k]=y;
b[k]=c[x];
c[x]=k;
}
int main(){
int n,i,x,y,m=-1000*N/2;
in>>n;
for(i=1; i<=n; ++i)
in>>xd[i];
for(i=1; i<n; ++i){
in>>x>>y;
add(x,y);
add(y,x);
++g[x];
++g[y];
}
int u=-1, p=0,st;
for(i=1; i<=n; ++i)
if(g[i]==1)
q[++u]=i;
while(p<=u){
i=q[p++];
st=c[i];
if(!v[i]){
v[i]=1;
//cout<<i<<":\n";
while(st){//cout<<a[st]<<"\n";
if(!v[a[st]]){
if(xd[i]>=0)
xd[a[st]]+=xd[i];
m=max(m,xd[a[st]]);
q[++u]=a[st];
}
st=b[st];
}
}
// cout<<m<<"\n\n";
}
out<<m;
return 0;
}