Cod sursa(job #2524332)

Utilizator MichaelXcXCiuciulete Mihai MichaelXcX Data 15 ianuarie 2020 14:27:57
Problema Sate Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <bits/stdc++.h>

using namespace std;

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

const short NMAX = 30005;

vector< pair< short, short > > G[NMAX];
queue<short> Q;

short N, M, X, Y;
short D[NMAX], visited[NMAX];

void Citire()
{
    fin >> N >> M >> X >> Y;

    for(short i = 0; i < M; i++) {
        short x, y, c;
        fin >> x >> y >> c;
        G[x].push_back(make_pair(y, c));
        G[y].push_back(make_pair(x, c));
    }

    memset(D, -1, sizeof(D));
    D[X] = 0;
    visited[X] = 1;
    Q.push(X);
}

void BFS()
{
    while(!Q.empty()) {
        short currentNode = Q.front();
        Q.pop();

        for(auto it : G[currentNode]) {
            if(!visited[it.first]) {
                if(it.first > currentNode)
                    D[it.first] = D[currentNode] + it.second;
                else
                    D[it.first] = D[currentNode] - it.second;

                if(it.first == Y) {
                    fout << D[Y] << "\n";
                    return;
                }
            }
            Q.push(it.first);
            visited[it.first] = 1;
        }
    }
}

int main()
{
    Citire();
    BFS();
}