Cod sursa(job #1452507)

Utilizator allexx2200Atanasiu Alexandru-Marian allexx2200 Data 21 iunie 2015 10:57:29
Problema Asmax Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <stdio.h>
#include <list>

#define NMAX 16001

#define FIN "asmax.in"
#define FOUT "asmax.out"

FILE *in, *out;

/* Numarul de elemente */
int N;

/* vectorul de valori */
int values[NMAX];

/* graful reprezentat ca lista de adiacenta */
std::list<int> graph[NMAX];

/* vectorul de dinamica */
int dinamic[NMAX];

/* visited */
bool visited[NMAX];

void din(int node){
	visited[node] = true;

	int sum = 0;
	bool v = false;
	for(int n : graph[node]){
		if(!visited[n]){
			v = true;
			din(n);
			if(dinamic[n] > 0){
				sum += dinamic[n];
			}
		}
	}

	if(!v){
		dinamic[node] = values[node];
		return;
	}

	dinamic[node] = sum;
}

void solve(){
	din(1);

}

int main(){
	in = fopen(FIN, "rt");
	out = fopen(FOUT, "wt");
	if(!in || !out) return 1;
	/* citire date */
	fscanf(in, "%d", &N);

	for(int i=1; i <= N; i++) fscanf(in, "%d", &values[i]);
	for(int i=0; i < N-1; i++){
		int s, d;
		fscanf(in, "%d%d", &s, &d);
		graph[s].push_back(d);
		graph[d].push_back(s);
	}

	solve();

	fprintf(out, "%d", dinamic[1]);

	/* inchidere fisiere */
	fclose(in);
	fclose(out);
	return 0;
}