Pagini recente » Cod sursa (job #1543378) | Cod sursa (job #2525430) | Cod sursa (job #1390794) | Cod sursa (job #2832639) | Cod sursa (job #1895161)
#include <iostream>
#include <vector>
#include <stdio.h>
using namespace std;
vector<int> a[16001];
long val[16001],N,x,y;
bool vazut[16001];
void 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)
{
rezolva(a[u][j]);
if( val[a[u][j]] > 0 )
suma =suma + val[a[u][j]];
}
val[u] +=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);
}
rezolva(1);
fprintf(g,"%d",val[1]);
fclose(f);
fclose(g);
return 0;
}