Cod sursa(job #494327)

Utilizator siminescuPaval Cristi Onisim siminescu Data 21 octombrie 2010 11:33:08
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<fstream>
#include<vector>
using namespace std;
ifstream f("sate.in");
ofstream g("sate.out");
# define nmax 30001
typedef struct orase {int nod,dist;};
vector <orase> v[nmax];
orase aux;
int n,m,x,y,km[nmax],l[nmax],st[nmax];
bool viz[nmax];
void read()
{
	f>>n>>m>>x>>y;int i,j,d,t;
	for(t=1;t<=m;t++)
	{
		f>>i>>j>>d;
		aux.nod=j;aux.dist=d;
		v[i].push_back(aux);
		aux.nod=i;aux.dist=-d;
		v[j].push_back(aux);
	}
	for(i=1;i<=n;i++)
		l[i]=v[i].size();
}
void afisare()
{
	int i,j;
	for(i=1;i<=n;i++)
	{
		for(j=0;j<l[i];j++)
			g<<i<<" "<<v[i][j].nod<<" "<<v[i][j].dist<<'\n';
		g<<'\n';
	}
}
int main()
{
	read();
	int pi,pj,i,j;
	pi=1;pj=1;
	st[1]=x;viz[x]=1;
	while(pi<=pj)
	{
		i=st[pi];
		for(j=0;j<l[i];j++)
			if(!viz[v[i][j].nod])
			{
				viz[v[i][j].nod]=1;
				km[v[i][j].nod]=km[i]+v[i][j].dist;
				pj++;st[pj]=v[i][j].nod;
			}
		pi++;
	}
	g<<km[y];
}