Cod sursa(job #1200540)

Utilizator IulianBoboUAIC Boboc Iulian IulianBobo Data 22 iunie 2014 19:29:30
Problema Asmax Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <iostream>
#include <fstream>
using namespace std;
typedef struct nod
{
	int value;
	nod *urm;
} *pnod;
pnod v[16001];
int viz[16001],node[16001],mi[16001],maxim;
void addVertex(pnod &dest,int value)
{
	pnod p=new nod;
	p->value=value;
	p->urm=dest;
	dest=p;
}

void DFS(int nod,int tatal)
{
	for(pnod p=v[nod];p;p=p->urm)
	{
		if(viz[p->value]==0)
		{
			if(mi[nod]+node[p->value]>mi[p->value])
				mi[p->value]=mi[nod]+node[p->value];
			viz[p->value]=1;
			DFS(p->value,nod);
		}
		else
			if(tatal!=-1)
			   if(node[nod]+mi[tatal]>mi[tatal])
				   mi[tatal]=mi[tatal]+node[nod];
	}
}
int main()
{
	FILE * fin,*fout;
	int n,a,b,i;
	fin=fopen("asmax.in","r");
	fout=fopen("asmax.out","w");
	fscanf(fin,"%d",&n);
	maxim=-1001;
	for(i=1;i<=n;i++)
	{
		fscanf(fin,"%d",&a);
		node[i]=mi[i]=a;
	}
	for(i=1;i<n;i++)
	{
		fscanf(fin,"%d %d",&a,&b);
		addVertex(v[a],b);
		addVertex(v[b],a);
	}
	for(i=1;i<=n;i++)
		if(viz[i]==0)
		{
			viz[i]=1;
			DFS(i,-1);
		}
	for(i=1;i<=n;i++)
		if(mi[i]>maxim) maxim=mi[i];
	cout<<maxim;
	fclose(fin);
	fclose(fout);
	return 0;
}