Pagini recente » Rating Giurgiu Florin (Altair) | Cod sursa (job #1855217) | Cod sursa (job #246040) | Cod sursa (job #779872) | Cod sursa (job #2044136)
#include <fstream>
#include <iostream>
#include <vector>
#include <string.h>
#include <climits>
#define Nmax 16000
using namespace std;
vector <pair<int,int> > vec[Nmax];
int vazut[Nmax];
int v[Nmax];
ifstream in("asmax.in");
ofstream out("asmax.out");
int s = 0, ma = INT_MIN;
int dfs(int node)
{
vazut[node] = 1;
int valoare = v[node];
int rez;
for(auto e : vec[node])
{
if(vazut[e.first] == 0)
{
rez = dfs(e.first);
if(rez > 0)
valoare += rez;
}
}
if(valoare > ma)
ma = valoare;
return valoare;
}
int main()
{
int N,x,y;
in >> N;
memset(vazut,0,sizeof(vazut));
for(int i = 1; i <= N; i++)
{
in >> x;
v[i] = x;
}
for(int i = 0; i < N-1; i++)
{
in >> x >> y;
vec[y].push_back(make_pair(x,v[x]));
vec[x].push_back(make_pair(y,v[y]));
}
dfs(1);
out << ma <<'\n';
return 0;
}