Cod sursa(job #1095452)

Utilizator roby2001Sirius roby2001 Data 30 ianuarie 2014 23:26:50
Problema Asmax Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
/*
          ~Keep It Simple!~
*/
    
#include <stdio.h>
#include <list>
 
#define MaxN 16005

using namespace std;

int N,v[MaxN],best[MaxN],maxv;
list<int> G[MaxN];
bool viz[MaxN];

void DF(int node)
{
	viz[node] = 1;
	for(list<int>::iterator it = G[node].begin(); it!=G[node].end(); it++)
	{
		if(!viz[*it])
		{
			DF(*it);
			if( best[node] + best[*it] > best[node])
			{
				best[node] = best[node] + best[*it];
				if( best[node] > maxv )
					maxv = best[node];
			}
		}
	}
}

int main()
{
    freopen("asmax.in","r",stdin);
    freopen("asmax.out","w",stdout);
 
    scanf("%d",&N);
 
 
    for(int i=1; i<=N; i++)
	{
        scanf("%d",&v[i]);
		best[i] = v[i];
	}

	int x,y;

	while(1)
	{
		scanf("%d%d",&x,&y);
		G[x].push_back(y);
		G[y].push_back(x);
		if(feof(stdin))
			break;
	}

	maxv = best[1];

	for(int i=1; i<=N; i++)
		if(!viz[i])
			DF(i);

	printf("%d",maxv < 0 ? 0:maxv);
}