Pagini recente » Cod sursa (job #665903) | Cod sursa (job #1316953) | Cod sursa (job #533004) | Cod sursa (job #1039450) | Cod sursa (job #1895199)
#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,"%ld",&val[i]);
for(int i = 0;i<N-1;i++)
{
fscanf(f,"%ld%ld",&x,&y);
a[x].push_back(y);
a[y].push_back(x);
}
rezolva(1);
int minn = val[1];
for(int i = 2;i<=N;i++)
if(val[i]> minn) minn = val[i];
fprintf(g,"%ld",minn);
fclose(f);
fclose(g);
return 0;
}