Cod sursa(job #2785413)

Utilizator Tudor_PascaTudor Pasca Tudor_Pasca Data 18 octombrie 2021 17:38:46
Problema Sate Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

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

int n, m, x, y;
int d[30005];
vector<vector<pair<int, int>>> adj;

void bfs()
{
    queue<int> q;
    q.push(x);
    d[x] = 0;

    while(!q.empty())
    {
        int node = q.front();
        q.pop();

        for(auto it: adj[node])
        {
            int next = it.first;
            int dist = it.second;

            if(d[next] != 0)
                continue;

            if(x > node)
            {
                if(node > next)
                    d[next] = d[node] + dist;
                else
                    d[next] = abs(d[node] - dist);
            }
            else
            {
                if(node > next)
                    d[next] = abs(d[node] - dist);
                else
                    d[next] = d[node] + dist;
            }

            q.push(next);
        }
    }
}

int main()
{
    in >> n >> m >> x >> y;
    adj.resize(n + 5);
    for(int i = 1; i <= m; i++)
    {
        int a, b, dist;
        in >> a >> b >> dist;
        adj[a].emplace_back(b, dist);
        adj[b].emplace_back(a, dist);
    }

    bfs();

    out << d[y] << '\n';

    return 0;
}