Pagini recente » Cod sursa (job #649482) | Cod sursa (job #2563991) | Cod sursa (job #984682) | Cod sursa (job #1274463) | Cod sursa (job #2830794)
#include <bits/stdc++.h>
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("asmax.in");
ofstream g("asmax.out");
void dfs(int nod, vector<bool> &vizitat, vector<vector<int>> &lista_adiacenta, vector<int> &val, vector<int> &suma){
vizitat[nod] = true;
suma[nod] = val[nod];
for(int i = 0; i < lista_adiacenta[nod].size(); i++){
if(vizitat[lista_adiacenta[nod][i]] == false){
dfs(lista_adiacenta[nod][i],vizitat,lista_adiacenta,val,suma);
if(suma[nod] < suma[nod] + val[lista_adiacenta[nod][i]])
suma[nod] = suma[nod] + val[lista_adiacenta[nod][i]];
}
}
}
int main()
{
int numar_noduri;
f >> numar_noduri;
vector<int> val(numar_noduri+1);
vector<int> suma(numar_noduri+1);
int valoare;
for(int i = 1; i <= numar_noduri; i++) f >> valoare, val[i] = valoare;
vector<vector<int>> lista_adiacenta;
lista_adiacenta.resize(numar_noduri+1);
int nod1, nod2;
for(int i = 1; i < numar_noduri; i++){
f >> nod1 >> nod2;
lista_adiacenta[nod1].push_back(nod2);
lista_adiacenta[nod2].push_back(nod1);
}
vector<bool> vizitat(numar_noduri+1,false);
dfs(1,vizitat,lista_adiacenta,val, suma);
int rezultat = suma[1];
for(int i = 2; i <= numar_noduri; i++)
if(suma[i] > rezultat) rezultat = suma[i];
g << rezultat;
return 0;
}