Cod sursa(job #183861)

Utilizator paulDeac Adrian paul Data 22 aprilie 2008 17:53:59
Problema Sate Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<stdio.h>
#include<stdlib.h>

#define in "sate.in"
#define out "sate.out"

struct nod{
	int inf,dist;
	nod *next;
} *l[30001];

long n,X,Y,m,suma;
int s[30001];

void add(int,int,int);
void df(int);

int main()
{
	freopen(in,"r",stdin);
	freopen(out,"w",stdout);
	int i,x,y,z;
	scanf("%ld%ld%ld%ld",&n,&m,&X,&Y);
	for(i=1;i<=m;i++)
	{
		scanf("%d%d%d",&x,&y,&z);
		add(x,y,z);
	}
	df(X);
	return 0;
}
void add(int x,int y,int z)
{
	nod *p=new nod;
	p->inf=x;
	p->dist=z;
	p->next=l[y];
	l[y]=p;
	p=new nod;
	p->inf=y;
	p->dist=z;
	p->next=l[x];
	l[x]=p;
}
void df(int nodc)
{
	int distanta;
	if(nodc==Y)
	{
		printf("%ld",suma);
		exit(0);
	}
	s[nodc]=1;
	nod *p=l[nodc];
	while(p)
	{
		if(!s[p->inf])
		{
			distanta=p->dist;
			if(nodc>p->inf)
				suma-=distanta;
			else
				suma+=distanta;
			df(p->inf);
		}
		p=p->next;
	}
	if(nodc>p->inf)
		suma+=distanta;
	else
		suma-=distanta;
}