Pagini recente » Cod sursa (job #170352) | Cod sursa (job #1869678) | Cod sursa (job #196470) | Cod sursa (job #2687760) | Cod sursa (job #2953853)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
const int NMAX = 16000;
const int INF = 16000001;
vector <int> muchii[NMAX + 1];
bool vizitat[NMAX + 1];
int valoare[NMAX + 1], scor[NMAX + 1], suma_maxima = 0;
void depth_first_search(int current)
{
vizitat[current] = true;
scor[current] = valoare[current];
for(auto next : muchii[current])
{
if(!vizitat[next])
{
depth_first_search(next);
if(scor[next] > 0)
{
scor[current] += scor[next];
}
}
}
suma_maxima = max(suma_maxima, scor[current]);
}
int main()
{
int n;
in >> n;
suma_maxima = -INF
; for(int i = 1; i <= n; i++)
{
in >> valoare[i];
suma_maxima = max(suma_maxima, valoare[i]);
}
for(int i = 0; i < n; i++)
{
int x, y;
in >> x >> y;
muchii[x].push_back(y);
muchii[y].push_back(x);
}
depth_first_search(1);
out << suma_maxima;
in.close();
out.close();
return 0;
}