Cod sursa(job #174484)

Utilizator anoukAnca Dumitrache anouk Data 8 aprilie 2008 21:35:49
Problema Asmax Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <cstdio>
#define DIM 15005
using namespace std;

typedef struct Nod {
	int vf;
	Nod* next;
} NOD, *PNOD;
PNOD L[DIM];
int N, A[DIM], S[DIM], sel[DIM];

void Add(int x, int y)
{
	PNOD p = new NOD;
	p->vf = y;
	p->next = L[x];
	L[x] = p;
}

int DF(int nod)
{
	sel[nod] = 1;
	S[nod] = A[nod];
	int sum;
	for (PNOD p = L[nod]; p; p = p->next)
		if (!sel[p->vf])
		{
			sum = DF(p->vf);
			S[nod] = sum > 0 ? S[nod] + sum : S[nod];
		}
	return S[nod];
}

int main()
{
	FILE *fin = fopen("asmax.in", "r");
	FILE *fout = fopen("asmax.out", "w");

	fscanf(fin, "%d", &N);
	for (int i = 1; i <= N; i++)
		fscanf(fin, "%d", A + i);
	int x, y;
	for (int i = 1; i < N; i++)
	{
		fscanf(fin, "%d%d", &x, &y);
		Add(x, y);
		Add(y, x);
	}
	int sum = DF(1);
	for (int i = 2; i <= N; i++)
		sum = sum < S[i] ? S[i] : sum;
	fprintf(fout, "%d\n", sum);

	fclose(fin);
	fclose(fout);
	return 0;
}