Pagini recente » Cod sursa (job #1944561) | Cod sursa (job #1116647) | Cod sursa (job #1846542) | Cod sursa (job #1861354) | Cod sursa (job #2514805)
#include <fstream>
#include <bitset>
#define Size 16000
using namespace std;
ifstream cin("asmax.in");
ofstream cout("asmax.out");
int n;
int val[Size+1];
int vf[Size*2+1],urm[Size*2+1],last[Size+1],nr;
int maxSum=-1000000000;
bitset <16001> viz;
void adauga(int from,int to)
{
vf[++nr]=to;
urm[nr]=last[from];
last[from]=nr;
}
int dfs(int nod)
{
int sum=val[nod];
viz[nod]=1;
for(int val,k=last[nod];k;k=urm[k])
if(!viz[ vf[k] ])
{
val=dfs(vf[k]);
if(val>=0)
sum+=val;
}
maxSum=max(maxSum,sum);
return sum;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>val[i];
for(int i,j,k=1;k<=n-1;k++)
{
cin>>i>>j;
adauga(i,j);
adauga(j,i);
}
dfs(1);
cout<<maxSum;
return 0;
}