Pagini recente » Cod sursa (job #1510307) | Cod sursa (job #229851) | Cod sursa (job #476629) | Cod sursa (job #2139214) | Cod sursa (job #1448431)
#include <vector>
#include <fstream>
using namespace std;
class arb{
vector<vector<int> > vec;
vector<int> val;
int max_subarb = -1001;
int max_subarb_in(const int cur, const int prev){
int rez = val[cur], tmp;
for(const auto next : vec[cur]){
if(next != prev){
tmp = max_subarb_in(next, cur);
rez += (tmp > 0 ? tmp : 0); } }
max_subarb = max(max_subarb, rez);
return rez; }
public:
arb(ifstream& f){
int n = 0;
f >> n;
vec.resize(n);
val.resize(n);
for(auto& x : val){
f >> x; }
for(int i = 1, a, b; i < n; ++i){
f >> a >> b;
--a, --b;
vec[a].push_back(b);
vec[b].push_back(a); } }
int get_max_subarb(){
max_subarb_in(0, -1);
return max_subarb; } };
int main(){
ifstream f("asmax.in");
ofstream g("asmax.out");
arb a(f);
g << a.get_max_subarb();
return 0; }