Pagini recente » Cod sursa (job #1104989) | Cod sursa (job #1949883) | Cod sursa (job #1750781) | Cod sursa (job #619880) | Cod sursa (job #2824772)
#include <bits/stdc++.h>
#include<fstream>
#include<vector>
#include<map>
#include<queue>
std::ifstream f("asmax.in");
std::ofstream g("asmax.out");
int n, m, x, y, rez, suma_maxim = -1001;
std::vector< std::vector< int> > lista;
std::vector<int> cost;
std::vector< bool> viz;
int subarbore(int nod){
int suma_nod = cost[nod];
viz[nod] = true;
for( auto i = lista[nod].begin() ; i != lista[nod].end(); i++){
int vecin = *i;
if( !viz[vecin] ){
//viz[vecin] = true;
int suma_vecin = subarbore(vecin);
if(suma_nod + suma_vecin > suma_nod) suma_nod += suma_vecin;
}
}
return suma_nod;
}
int main() {
f>>n;
std::vector< int > v;
for(auto i = 0 ; i<=n ; i++) {
viz.push_back(false);
lista.push_back(v);
}
for(int i = 0 ; i < n ; i++){
f >> x;
cost.push_back(x);
}
for(int i = 1 ; i < n ; i++){
f >> x >> y;
lista[x-1].push_back(y-1);
lista[y-1].push_back(x-1);
}
int rez = subarbore(0);
g<<rez;
return 0;
}