Cod sursa(job #494674)

Utilizator Cristi09Cristi Cristi09 Data 22 octombrie 2010 16:29:32
Problema Sate Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<stdio.h>
#include<vector>
#define MAX 30001
using namespace std;
int n,m,x,y,viz[MAX];

struct nod
{
	int vec,cost;
};
vector<nod> a[MAX];
int bfs()
{
	int prim=1,ultim=2,coada[2][4*MAX],i,ind;
	coada[0][prim] = x;
	while(prim != ultim)
	{
		ind = coada[0][prim];
		viz[ind] = 1;
		for(i=0;i<a[ind].size();++i)
		{
			if(!viz[a[ind][i].vec])
			{
				coada[0][ultim] = a[ind][i].vec;
				coada[1][ultim] = coada[1][prim] + a[ind][i].cost;
				
				if(coada[0][ultim] == y)
					return coada[1][ultim];
				
				++ultim;
			}
		}
		++prim;
	}
	return 0;
}
int main()
{
	FILE*f = fopen("sate.in","r");
	fscanf(f,"%d %d %d %d",&n,&m,&x,&y);
	int i,j,d,k;
	nod aux;
	for(k=1;k<=n;++k)
	{
		fscanf(f,"%d%d%d",&i,&j,&d);
		aux.vec = j;
		aux.cost = d;
		a[i].push_back(aux);
		aux.vec = i;
		aux.cost = -d;
		a[j].push_back(aux);
	}
	fclose(f);
	
	if(x>y)
	{
		i = x;x = y;y = i;	
	}
	
	FILE*g = fopen("sate.out","w");
	fprintf(g,"%d\n",bfs());
	fclose(g);	
	return 0;
}