Pagini recente » Cod sursa (job #144348) | Cod sursa (job #2830289)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
int noduri, maxim, a, b;
vector <int> adiacenta[16001], valori, vizitat;
void dfs(int x)
{
vizitat[x] = 1;
for (int i = 0; i < adiacenta[x].size(); i++)
if (!vizitat[adiacenta[x][i]])
{
dfs(adiacenta[x][i]);
if (valori[adiacenta[x][i]] > 0)
valori[x] += valori[adiacenta[x][i]];
}
}
int main()
{
in >> noduri;
valori.resize(noduri + 1);
vizitat.resize(noduri + 1);
for (int i = 1; i <= noduri; i++)
{
in >> valori[i];
vizitat[i] = 0;
}
for (int i = 1; i < noduri; i++)
{
in >> a >> b;
adiacenta[a].push_back(b);
adiacenta[b].push_back(a);
}
dfs(noduri);
for (int i = 1; i <= noduri; i++)
if (valori[i] > maxim)
maxim = valori[i];
out << maxim << "\n";
return 0;
}