Pagini recente » Cod sursa (job #1891149) | Cod sursa (job #1083003) | Cod sursa (job #2647155) | Cod sursa (job #2276541) | Cod sursa (job #1173535)
#include <cstdio>
#include <vector>
using namespace std;
int N,i,x,y,l,val[16005],tata[16005],maxim=-2e9;
vector <int> graf[16005];
void DFS(int nod)
{
for (register int i=0;i<graf[nod].size();i++)
{
x=graf[nod][i];
if (x==tata[nod]) continue;
tata[x]=nod;
DFS(x);
if (val[graf[nod][i]]>0) val[nod]+=val[graf[nod][i]];
if (val[nod]>maxim) maxim=val[nod];
}
}
int main()
{
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
scanf("%d",&N);
for (i=1;i<=N;i++) scanf("%d",&val[i]);
for (i=1;i<N;i++)
{
scanf("%d %d",&x,&y);
graf[x].push_back(y);
graf[y].push_back(x);
}
DFS(1);
printf("%d",maxim);
return 0;
}