Cod sursa(job #494060)

Utilizator Cristi09Cristi Cristi09 Data 20 octombrie 2010 17:06:15
Problema Sate Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<stdio.h>
#define URMAT v[0][ v[1][coada[0][prim]] ]
#define LOCURMAT v[1][ v[1][coada[0][prim]] ]
#define MAX 230049
int v[3][MAX],n,m,x,y,cont,coada[2][MAX],prim,ultim;
void add(int x,int y,int d)
{
	if(!v[0][x])
	{
		v[1][x] = cont;
	}
	else
	{
		v[1][v[0][x]] = cont;
	}
	v[0][x] = cont;
	v[0][cont] = y;
	v[2][cont] = d;
}
int main()
{
	FILE*f = fopen("sate.in","r");
	fscanf(f,"%d %d %d %d",&n,&m,&x,&y);
	int i,j,d,k;
	cont = n+1;
	for(k=1;k<=n;++k,++cont)
	{
		fscanf(f,"%d%d%d",&i,&j,&d);
		add(i,j,d);
		++cont;
		add(j,i,d);
	}
	fclose(f);
	prim = 1;
	coada[0][prim] = x;
	ultim = 2;
	int var,min = 999999999;
	while(prim!=ultim)
	{
		while(v[1][coada[0][prim]])
		{
			if(v[1][ URMAT ])
			{				
			var = URMAT;
			coada[0][ultim] = var;
			coada[1][ultim] = coada[1][prim];
			if(var < coada[0][prim])
				coada[1][ultim] -= v[2][ v[1][coada[0][prim]] ];
			else coada[1][ultim] += v[2][ v[1][coada[0][prim]] ];
			
			if(var == y && coada[1][ultim] < min)
			{
				min = coada[1][ultim];
			}
			++ultim;
			}
			v[1][coada[0][prim]] = LOCURMAT;
			
		}
		++prim;
	}
	FILE*g = fopen("sate.out","w");
	fprintf(g,"%d\n",min);
	fclose(g);
	return 0;
}