Pagini recente » Cod sursa (job #1767274) | Cod sursa (job #2089204) | Borderou de evaluare (job #83883) | Cod sursa (job #2890501) | Cod sursa (job #1879094)
#include <cstdio>
#include <vector>
using namespace std;
vector <int> muchii[16001];
int v[16001],maxim=-1000000,frunza[16001];
bool pass[16001];
int DFS(int x,int sum)
{
pass[x]=1;
int l=muchii[x].size();
for (int i=0;i<l;++i)
if (pass[muchii[x][i]]==0)
{
int x1=DFS(muchii[x][i],0);
if (x1>0) sum+=x1;
}
sum+=v[x];
if (sum>maxim) maxim=sum;
return sum;
}
int main()
{
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
int n;
scanf("%d\n",&n);
for (int i=1;i<=n;++i)
scanf("%d ",&v[i]);
for (int i=1;i<n;++i)
{
int a,b;
scanf("%d %d",&a,&b);
muchii[a].push_back(b);
muchii[b].push_back(a);
frunza[a]++;
frunza[b]++;
}
DFS(1,0);
printf("%d ",maxim);
}