Cod sursa(job #800142)

Utilizator cdascaluDascalu Cristian cdascalu Data 20 octombrie 2012 20:13:25
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<fstream>
#define URMAT v[0][ v[1][coada[0][prim]] ]
#define LOCURMAT v[1][ v[1][coada[0][prim]] ]
#define MAX 230049
using namespace std;
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()
{
	ifstream f("sate.in");
	f>>n>>m>>x>>y;
	int i,j,d,k;
	cont = n+1;
	for(k=1;k<=m;++k,++cont)
	{
		f>>i>>j>>d;
		add(i,j,d);
		++cont;
		add(j,i,d);
	}
	f.close();
	prim = 1;
	coada[0][prim] = x;
	ultim = 2;
	int var;
	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)
			{
				ofstream g("sate.out");
				g<<coada[1][ultim];
				g.close();
				return 0;
				
			}
			++ultim;
			}
			v[1][coada[0][prim]] = LOCURMAT;
			
		}
		++prim;
	}
	/*FILE*g = fopen("sate.out","w");
	fprintf(g,"%d\n",min);
	fclose(g);*/
	return 0;
}