Cod sursa(job #1916988)

Utilizator RaresEGaySopterean Adrian RaresEGay Data 9 martie 2017 10:51:03
Problema Sate Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <fstream>
#include <iostream>
#include <vector>
#include <queue>

#define maxn 30005
#define INF 0x3f3f3f3f

using namespace std;

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

vector < pair <int, int > > v[maxn];
queue <int> Q;
int n, m, l, r;
int dist[maxn], inQueue[maxn];

int BellmanFord(){

    for(int i = 1; i <= n; ++i) dist[i] = INF;

    Q.push(l);
    dist[l] = 0;
    while(!Q.empty()){

        int u = Q.front();
        inQueue[u] = 0;
        Q.pop();

        for(int i = 0; i < v[u].size(); ++i){

            int nod = v[u][i].first;
            int distance = v[u][i].second;

            if(nod > u){
                if(dist[nod] > dist[u] + distance)
                    dist[nod] = dist[u] + distance;
                if(!inQueue[nod]){
                    inQueue[nod] = 1;
                    Q.push(nod);
                }
            }
            else if(dist[nod] > dist[u] - distance){
                dist[nod] = dist[u] - distance;
                if(!inQueue[nod]){
                    inQueue[nod] = 1;
                    Q.push(nod);
                }
            }

        }

    }
    g << dist[r] << '\n';

}

int main (){

    f >> n >> m >> l >> r;
    for (int i = 1; i <= n; ++i){
        int x, y, d;
        f >> x >> y >> d;

        v[x].push_back(make_pair(y, d));
        v[y].push_back(make_pair(x, d));
    }

    BellmanFord();

}