Cod sursa(job #697668)

Utilizator Cezar13Cezar Manea Cezar13 Data 29 februarie 2012 10:28:16
Problema Sate Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#include <vector>
#define InFile "sate.in"
#define OutFile "sate.out"
#define INF 2000000000
#define NMAX 300008
#define MMAX 100008

using namespace std;
struct Arc{int x,y,c;};
vector <Arc> G[NMAX];
int dmin[NMAX],n,m,x0,y,viz[NMAX];
void citire();
void dijkstra();
void afisare();
int main()
{
	citire();
	dijkstra();
	afisare();
	return 0;
}

void citire()
{
	ifstream fin(InFile);
	fin>>n>>m>>x0>>y;
	Arc crt;
	int x,y1;
	for (int i=0;i<m;i++)
		fin>>x>>crt.y>>crt.c, G[x].push_back(crt), y1=crt.y, crt.y=x, G[y1].push_back(crt);
}

void dijkstra()
{
	int ok=1,min,k,i;
	for (i=1;i<=n;i++)
		dmin[i]=INF;
	for (i=0;i<G[x0].size();i++)
		dmin[G[x0][i].y]=G[x0][i].c;
	viz[x0]=1;
	while (ok)
		{
			min=INF;
			for (i=1;i<=n;i++)
				if (!viz[i] && min>dmin[i])
					{
						k=i;
						min=dmin[i];
					}
			if (min!=INF)
				{
					viz[k]=1;
					for (i=0;i<G[k].size();i++)
						{
							if (dmin[G[k][i].y]> dmin[k]+G[k][i].c)
								dmin[G[k][i].y]=dmin[k]+G[k][i].c;
						}
				}
			else ok=0;
		}
}

void afisare()
{
	ofstream fout(OutFile);
	fout<<dmin[y]<<"\n";
}