Pagini recente » Cod sursa (job #2647037) | Cod sursa (job #2629409) | Cod sursa (job #118598) | Cod sursa (job #2219689) | Cod sursa (job #2915399)
#include <fstream>
#include <vector>
#define DIM 16001
using namespace std;
vector <int> L[DIM];
/**
se da un arbore in care nodurile au numere asociate
sa se gaseasca un subarbore de cost maxim (suma costurilor nodurilor
din el sa fie cat mai mare posibila)
**/
int C[DIM], D[DIM], v[DIM];
int n, i, x, y, sol = -2000000000;
void dfs(int nod) {
v[nod] = 1;
D[nod] = C[nod];
for (int i=0;i<L[nod].size();i++) {
int vecin = L[nod][i];
if (v[vecin] == 0) {
dfs(vecin);
if (D[vecin] > 0)
D[nod] += D[vecin];
}
}
if (D[nod] > sol) /// aici dupa ce am trecut prin fii lui nod
/// putem spune ca avem valoarea finala a luo D[nod]
/// si o putem lua in calcul la solutie
sol = D[nod];
}
int main () {
ifstream fin("asmax.in");
ofstream fout("asmax.out");
fin>>n;
for (i=1;i<=n;i++)
fin>>C[i];
for (i=1;i<=n-1;i++) {
fin>>x>>y;
L[x].push_back(y);
L[y].push_back(x);
}
dfs(1);
fout<<sol;
return 0;
}