Cod sursa(job #557986)

Utilizator tinkyAndrei Ilisei tinky Data 17 martie 2011 00:29:35
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<fstream>
#include<vector>
#include<queue>
#define nmn 30002
#define pb push_back
using namespace std;
vector<int> v[nmn];
vector<int> c[nmn];
queue<int> q;
int n,m,X,Y;
int d[nmn];
//int viz[nmn];
void citire()
{
	int i,x,y,cost;
	ifstream in("sate.in");
	in>>n>>m>>X>>Y;
	for (i=1;i<=m;i++)
	{
		in>>x>>y>>cost;
		v[x].pb(y);
		v[y].pb(x);
		c[x].pb(cost);
		c[y].pb(-cost);
	}
}

void afisare()
{
	ofstream out("sate.out");
	out<<d[Y]-1;
}
void af()
{
	ofstream out("sate.out");
	out<<"12";
}
int main()
{
	int i,x,y,ok=1;
	citire();
	q.push(X);
	d[X]=1;
	//viz[X]=1;
	while (!q.empty()&&ok)
	{
		x=q.front();
		q.pop();
		for (i=0;i<(int)v[x].size();i++)
		{
			y=v[x][i];
			if (y!=X)
			if (!d[y])
			{
				//viz[y]++;
					d[y]=d[x]+c[x][i];
				q.push(y);
			}
			/*else if(d[y]>c[x][i]+d[x])
			{
				d[y]=d[x]+c[x][i];
				q.push(y);
				//viz[y]++;
				
			}*/
			//if (viz[y]>n)
			//	ok=0;
			if (d[Y])
			{
				afisare();
				return 0;
			}
		}
	}
	if (!ok)
		af();
	else
		afisare();
	
}