Cod sursa(job #782157)

Utilizator alex_unixPetenchea Alexandru alex_unix Data 26 august 2012 01:04:42
Problema Asmax Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb

#include <cstdio>

const unsigned int MAX_SIZE(16001);
const signed int MIN_COST(-1000);

signed int cost [MAX_SIZE];

struct list
{
	unsigned int neighbor;
	struct list *next;
};

struct list *graph [MAX_SIZE];

bool visited [MAX_SIZE];

void DepthFirstSearch (unsigned int vertex)
{
	visited[vertex] = true;
	for (struct list *iterator(graph[vertex]) ; iterator ; iterator = iterator->next)
	{
		if (visited[iterator->neighbor])
			continue;
		unsigned int neighbor(iterator->neighbor);
		DepthFirstSearch(neighbor);
		if (cost[neighbor] > 0)
			cost[vertex] += cost[neighbor];
	}
}

int main (void)
{
	std::freopen("asmax.in","r",stdin);
	std::freopen("asmax.out","w",stdout);
	unsigned int n;
	std::scanf("%d",&n);
	signed int *iterator(cost + 1), *end(cost + n);
	do
	{
		std::scanf("%d",iterator);
		++iterator;
	}
	while (iterator <= end);
	unsigned int node1, *node1_ptr(&node1), node2, *node2_ptr(&node2);
	struct list *new_path;
	do
	{
		std::scanf("%u %u",node1_ptr,node2_ptr);
		new_path = new struct list;
		new_path->neighbor = node2;
		new_path->next = graph[node1];
		graph[node1] = new_path;
		new_path = new struct list;
		new_path->neighbor = node1;
		new_path->next = graph[node2];
		graph[node2] = new_path;
		--n;
	}
	while (n > 1);
	std::fclose(stdin);
	DepthFirstSearch(1);
	iterator = cost;
	signed int min_cost(-(2 << 30));
	do
	{
		if (*iterator > min_cost)
			min_cost = *iterator;
		++iterator;
	}
	while (iterator <= end);
	std::printf("%d\n",min_cost);
	std::fclose(stdout);
	return 0;
}