Pagini recente » Cod sursa (job #839638) | Cod sursa (job #269771) | Cod sursa (job #2539589) | Cod sursa (job #50756) | Cod sursa (job #1322490)
#include <stdio.h>
#include <vector>
std::vector<int> *adj;
int max;
int a[16001],n,qu[16001],ps,pt,ver[16001];
void bfs(int sum)
{
ver[qu[ps]]=1;
if(max<sum) max=sum;
if(pt==ps||ps>n) return;
int len=adj[qu[ps]].size();
for(int it=0;it<len;++it)
{
if(ver[adj[qu[ps]][it]]==0)
{
if((a[adj[qu[ps]][it]]>0)||(sum+a[adj[qu[ps]][it]]>0))
{
qu[pt]=adj[qu[ps]][it];
pt++;
}
}
}
ps++;
bfs(sum+a[qu[ps]]);
}
int main()
{
freopen ("asmax.in","r",stdin);
freopen ("asmax.out","w",stdout);
scanf("%d",&n);
adj=new std::vector<int> [n+1];
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
int p1,p2;
for(int i=1;i<n;i++)
{
scanf("%d%d",&p1,&p2);
adj[p1].push_back(p2);
adj[p2].push_back(p1);
}
for(int i=1;i<=1;i++)
{
for(int j=1;j<=n;j++) ver[j]=0;
qu[0]=i;
pt=1;
ps=0;
bfs(a[i]);
}
printf("%d\n",max);
}