Pagini recente » Cod sursa (job #2902035) | Cod sursa (job #1613494) | Cod sursa (job #1434061) | Cod sursa (job #469049) | Cod sursa (job #2829393)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
void DFS(int &nr_max, int &nod_curent, vector <int>& viz, vector <int>& val, vector <vector <int>>& lista_vecini) {
viz[nod_curent] = 1;
for (int i = 0; i < lista_vecini[nod_curent].size(); i++)
if (viz[lista_vecini[nod_curent][i]] == 0) {
DFS(nr_max, lista_vecini[nod_curent][i], viz, val, lista_vecini);
if (val[lista_vecini[nod_curent][i]] > 0)
val[nod_curent] = val[nod_curent] + val[lista_vecini[nod_curent][i]];
}
if (val[nod_curent] > nr_max)
nr_max = val[nod_curent];
}
int main() {
int n;
in >> n;
vector <int> val(n + 1, 0);
for (int i = 1; i <= n; i++)
in >> val[i];
vector <vector <int>> v;
v.resize(n + 1);
for (int i = 1; i <= n - 1; i++) {
int x, y;
in >> x >> y;
v[x].push_back(y);
v[y].push_back(x);
}
int nod_curent = 1;
vector <int> viz(n + 1, 0);
int nr_max = -1001;
DFS(nr_max, nod_curent, viz, val, v);
out << nr_max;
in.close();
out.close();
return 0;
}