Pagini recente » Cod sursa (job #2434933) | Cod sursa (job #1629930) | Cod sursa (job #653583) | Cod sursa (job #377076) | Cod sursa (job #1173532)
#include <cstdio>
#include <vector>
using namespace std;
int N,i,x,y,l,val[16005],tata[16005],maxim=-(1<<30);
vector <int> graf[16005];
void DFS(int nod)
{
vector <int>::iterator it;
for (it=graf[nod].begin();it!=graf[nod].end();it++)
{
if (*it==tata[nod]) continue;
tata[*it]=nod;
DFS(*it);
if (val[*it]>0) val[nod]+=val[*it];
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;
}