Cod sursa(job #1650146)

Utilizator SirStevensIonut Morosan SirStevens Data 11 martie 2016 16:49:42
Problema Sate Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("sate.in");
ofstream out("sate.out");

const int Nmax=1e5;

#define pb push_back

int L[Nmax],n,m,x,y,c1,a,b;
vector< pair < int,int > > G[30000];
deque<int> q;

void bfs(){

    int node;

    while(!q.empty()){

        node=q.front();
        q.pop_front();
        for(int i=0;i<G[node].size();i++){
            if(L[G[node][i].first] > L[node]+ G[node][i].second ){
                    if(G[node][i].first > node)
                        L[G[node][i].first] = L[node] + G[node][i].second;
                    else
                        L[G[node][i].first] = L[node] - G[node][i].second;
                q.pb(G[node][i].first);
            }

        }
    }

}

int main(){

    in>>n>>m>>x>>y;
    for(int i=1;i<=n;i++){
        L[i]=Nmax;
    }
    L[x]=0;
    for(int i=1;i<=m;i++){

        in>>a>>b>>c1;
        G[a].pb({b,c1});
        G[b].pb({a,c1});
    }
    q.pb(x);
    bfs();
    if(L[y]==Nmax)
        L[y]=-1;
    out<<L[y];


    return 0;
}