Pagini recente » Cod sursa (job #1722017) | Cod sursa (job #141290) | Cod sursa (job #2110767) | Cod sursa (job #2377175) | Cod sursa (job #974826)
Cod sursa(job #974826)
#include <cstdio>
#include <bitset>
#include <list>
using namespace std;
struct nod
{
int val;
list<int> vecini;
}v[16005];
int m[16005];
bitset<16005> viz;
void parc(int nod)
{
viz[nod]=1;
m[nod]=v[nod].val;
list<int>::iterator it;
for(it=v[nod].vecini.begin();it!=v[nod].vecini.end();it++)
if(!viz[*it])
{
parc(*it);
if(m[*it]>0)
m[nod]+=m[*it];
}
}
int main()
{
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
int n,i,x,y;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&v[i].val);
for(i=1;i<n;i++)
{
scanf("%d%d",&x,&y);
v[x].vecini.push_back(y);
v[y].vecini.push_back(x);
}
parc(1);
int maxim=m[1];
for(i=2;i<=n;i++)
if(m[i]>maxim)
maxim=m[i];
printf("%d\n",maxim);
return 0;
}