Cod sursa(job #1347331)

Utilizator gerd13David Gergely gerd13 Data 18 februarie 2015 21:49:46
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <fstream>
#include <vector>
#include <algorithm>
#include <iostream>
#include <queue>
#include <cstring>

#define x first
#define y second
#define mp make_pair
#define pb push_back


using namespace std ;

typedef unsigned long long ull ;
typedef pair <int, int> Pair ;

const int NMAX = 100024 ;
const int INF = 0x3f3f3f3f ;

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

int N, M, vis[NMAX] ;

vector <Pair> V[NMAX] ;
queue <int> Q ;
int X, Y ;



inline void BFS()
{
    vector <int> sol(N + 1, INF) ;
        for(int i = 0 ; i < N ; ++ i)
            sol[i] = INF ;

    sol[X] =  0 ;
    Q.push(X) ;


    while(!Q.empty() || sol[Y] == INF)
    {
        int nod = Q.front() ;
        Q.pop() ;
        for(int i = 0 ; i <  V[nod].size() ; ++ i)
        {

            if(sol[V[nod][i].y]  > sol[nod] + V[nod][i].x)
            {
                sol[V[nod][i].y]  =  sol[nod] + V[nod][i].x ;
                Q.push(V[nod][i].y) ;
            }
        }
    }

    fout << sol[Y]<< '\n' ;
}

int main()
{
    fin >> N >> M >> X >> Y ;

    for(int i = 1 ; i <= M ; ++ i)
    {
        int XX, YY ;
        int cos ;
        fin >> XX >> YY >> cos;

        V[XX].pb(mp(cos, YY)) ;
        V[YY].pb(mp(-cos, XX)) ;
    }

    BFS() ;
    fin.close() ;
    fout.close() ;
    return  0 ;
}