Cod sursa(job #1741211)

Utilizator Dan_RadulescuRadulescu Dan Dan_Radulescu Data 13 august 2016 12:46:00
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include<fstream>
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
int n,m,x,y,d[30001],v[30001],coada[30001];
struct nod{
    int inf,dist;
    nod *urm;
}*L[30001];
void adaugsf(int val,int d,nod *&vf){
     nod *q;
     q=new nod;
     q->inf=val;
     q->dist=d;
     q->urm=vf;
     vf=q;
}
void cit(){
    int i,a,b,c;
    fin>>n>>m>>x>>y;
    for (i=1;i<=n;i++)
        L[i]=0;
    for (i=1;i<=m;i++)
    {
        fin>>a>>b>>c;
        adaugsf(b,c,L[a]);
        adaugsf(a,c,L[b]);
    }
    fin.close();
}
void bfs(){
    nod *q;
    int p,u,curent;
    p=u=1;
    coada[u]=x;
    v[x]=1;
    while(p<=u){
        curent=coada[p];
        q=L[curent];
        while(q!=0){
            if (v[q->inf]==0){
                v[q->inf]=1;
                if (q->inf<curent) d[q->inf]=d[curent]-q->dist;
                   else
                    d[q->inf]=d[curent]+q->dist;
                u++;
                coada[u]=q->inf;
            }
            q=q->urm;
        }
        p++;
    }
}
int main(){
   cit();
   bfs();
   if (d[y]<0) d[y]=d[y]*(-1);
   fout<<d[y];
   fout.close();
   return 0;
}