Cod sursa(job #1448431)

Utilizator tamionvTamio Vesa Nakajima tamionv Data 7 iunie 2015 02:07:38
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#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; }