Pagini recente » Cod sursa (job #2066262) | Cod sursa (job #1540709) | Cod sursa (job #532454) | Cod sursa (job #2348827) | Cod sursa (job #2824775)
#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){
//std::cout<<"NODUL: "<<nod<<"\n";
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);
//std::cout<<"nodul: "<<nod<<"\n";
//std::cout<<"suma vecin: "<<suma_vecin<<" suma nod: "<< suma_nod<<"\n";
if(suma_nod + suma_vecin > suma_nod) suma_nod += suma_vecin;
//std::cout<<"suma nod noua: "<<suma_nod<<"\n";
}
}
suma_maxim = std::max(suma_nod, suma_maxim);
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<<suma_maxim;
return 0;
}