Pagini recente » Cod sursa (job #1255506) | Cod sursa (job #542281) | Cod sursa (job #1479798) | Cod sursa (job #967093) | Cod sursa (job #2210656)
#include <bits/stdc++.h>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
#define N 16001
int arr[N];
bool v[N];
int a[2*N];
int b[2*N];
int c[N];
int k=0,s=0,m=0;
int dfs(int i){
int t=c[i];
v[i]=1;
while(t){
if(!v[a[t]])
arr[i]+=max(0,dfs(a[t]));
t=b[t];
}//}cout<<i<<" "<<arr[i]<<" "<<s<<"\n";
m=max(m,arr[i]);
return arr[i];
}
int add(int x, int y){
a[++k]=y;
b[k]=c[x];
c[x]=k;
}
int main(){
int n,x,y,i,j;
in>>n;
for(i=1; i<=n; ++i)
in>>arr[i];
for(i=1; i<n; ++i){
in>>x>>y;
add(x,y);
add(y,x);
}
dfs(1);
out<<m;
return 0;
}