Cod sursa(job #898633)

Utilizator noruIlies Norbert noru Data 28 februarie 2013 11:06:53
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include<fstream>
using namespace std;
ifstream f("sate.in");
ofstream g("sate.out");
int n,m,x,y,viz[30001],dist[30001];
typedef struct nod {int la, cost;nod *urm;}NOD;
NOD *p[30001];
void add(int x, int y, int c)
{
	nod *q,*r;
	q=new nod;
	q->la=y;
	q->cost=c;
	q->urm=p[x];
	p[x]=q;
	r=new nod;
	r->la=x;
	r->cost=-c;
	r->urm=p[y];
	p[y]=r;
}
void citire()
{
	f>>n>>m>>x>>y;
	for (int i=1;i<=m;i++)
	{
		int a,b,c;
		f>>a>>b>>c;
		add(a,b,c);
	}
}
int INF=99999999;
void bmf(int start)
{
	int i,j,c;
	nod *st,*dr;
	for (i=1;i<=n;i++)
	{
		dist[i]=INF;
		viz[i]=0;
	}
	st=dr=new nod;
	st->la=start;
	st->urm=NULL;
	dist[start]=0;
	viz[start]=1;
	while (st)
    {
        i=st->la;
        viz[i]=0;
        for (nod *q=p[i];q;q=q->urm)
        {
            j=q->la;
			c=q->cost;
            if (dist[j]>dist[i]+c)
            {
                dist[j]=dist[i]+c;
                if (viz[j]==0)
                {
                    viz[j]=1;
                    nod *t=new nod;
                    t->la=j;
                    t->urm=NULL;
                    dr->urm=t;
                    dr=dr->urm;
                }
            }
        }
        nod *t=st;
        st=st->urm;
        delete t;
    }
}
int main()
{
	citire();
	bmf(x);
	g<<dist[y];
	return 0;
}