Pagini recente » Cod sursa (job #1507571) | Borderou de evaluare (job #2116791) | Cod sursa (job #2660435) | Cod sursa (job #1157512) | Cod sursa (job #1236815)
using namespace std;
#include <fstream>
#include <vector>
FILE *fin = fopen("asmax.in", "r");
FILE *fout = fopen("asmax.out", "w");
#define Nmax 16001
#define INF 2000000000
int v[Nmax], mymax = -INF;
vector <bool> uz(Nmax);
vector <int> G[Nmax];
int DFS(int) ;
int main()
{
int i, a, b, n, rez;
fscanf(fin, "%d", &n);
for(i = 1; i <= n; ++i) fscanf(fin, "%d", v + i);
for(i = 1; i < n; ++i)
{
fscanf(fin, "%d %d", &a, &b);
G[a].push_back(b);
G[b].push_back(a);
}
DFS(1);
if(mymax < 0)
{
mymax = -INF;
for(i = 1; i <= n; ++i)
if(mymax < v[i]) mymax = v[i];
}
fprintf(fout, "%d\n", mymax);
return 0;
}
int DFS(int vf)
{
int s = v[vf];
vector <int>::iterator it;
uz[vf] = 1;
for(it = G[vf].begin(); it != G[vf].end(); ++it)
if(!uz[*it])
s += DFS(*it);
if(mymax < s) mymax = s;
if(s < 0) s = 0;
return s;
}