Cod sursa(job #2201379)

Utilizator copanelTudor Roman copanel Data 4 mai 2018 16:48:11
Problema Asmax Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.81 kb
/* ༼⌐■ل͟■༽ */
#include <stdio.h>
#include <stdbool.h>

#define N 16001

int list[N], vf[2 * N], next[2 * N], nr, s[N], max = -16000001;
bool viz[N];

void add(int x, int y) {
	vf[++nr] = y;
	next[nr] = list[x];
	list[x] = nr;
}

void dfs(int x) {
	viz[x] = true;
	int p, y;

	p = list[x];
	while (p != 0) {
		y = vf[p];
		if (!viz[y]) {
			dfs(y);
			if (s[y] > 0) {
				s[x] += s[y];
			}
		}
		p = next[p];
	}
	if (s[x] > max)
		max = s[x];
}

int main() {
	FILE *fin, *fout;
	int n, i, x, y, prev;

	fin = fopen("asmax.in", "r");
	fscanf(fin, "%d", &n);
	for (i = 1; i <= n; i++)
		fscanf(fin, "%d", &s[i]);
	for (i = 0; i < n - 1; i++) {
		fscanf(fin, "%d%d", &x, &y);
		add(x, y);
		add(y, x);
	}
	fclose(fin);

	dfs(1);

	fout = fopen("asmax.out", "w");
	fprintf(fout, "%d", max);
	fclose(fout);

	return 0;
}