Pagini recente » Cod sursa (job #191177) | Cod sursa (job #2735661) | Cod sursa (job #3273983) | Cod sursa (job #2704632) | Cod sursa (job #1895155)
#include <iostream>
#include <vector>
#include <stdio.h>
using namespace std;
vector<int> a[16001];
long val[16001],N,x,y;
bool vazut[16001];
int rezolva(int u)
{
long suma = 0,ret;
vazut[u] = 1;
for(int j = 0;j<a[u].size();j++)
if(vazut[a[u][j]] == 0)
{
ret = rezolva(a[u][j]);
if(ret>0)
suma =suma + ret;
}
suma +=val[u];
return suma;
}
int main()
{
FILE *f = fopen("asmax.in","r");
FILE *g = fopen("asmax.out","w");
fscanf(f,"%d",&N);
for(int i = 1;i<=N;i++)
fscanf(f,"%d",&val[i]);
for(int i = 0;i<N-1;i++)
{
fscanf(f,"%d%d",&x,&y);
a[x].push_back(y);
a[y].push_back(x);
}
fprintf(g,"%d",rezolva(1));
fclose(f);
fclose(g);
return 0;
}