Pagini recente » Istoria paginii utilizator/arionboss | Cod sursa (job #1173540)
#include <cstdio>
#include <vector>
using namespace std;
int N,i,x,y,l,val[16005],tata[16005];
long long maxim=-2000000000;
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]); if (val[i]>maxim) maxim=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\n",maxim);
return 0;
}