Pagini recente » Cod sursa (job #645511) | Cod sursa (job #1248336) | Cod sursa (job #59428) | Cod sursa (job #2631165) | Cod sursa (job #1452507)
#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;
}