Cod sursa(job #3138685)

Utilizator PetraPetra Hedesiu Petra Data 21 iunie 2023 12:15:58
Problema Sate Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

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

vector<pair<int, int>> G[36001];
priority_queue<pair<long long, int>> q;
int n, m, x, y, viz[36001];
long long dist[36001];

void dijkstra(int start)
{
    q.push(make_pair(0, start));
    while (!q.empty())
    {
        int c = q.top().second;
        long long d = -q.top().first;
        q.pop();

        if (viz[c]) continue;
        viz[c] = 1;
        dist[c] = d;

        for (int i = 0; i < G[c].size(); i++)
            q.push(make_pair(-(d + G[c][i].second), G[c][i].first));
    }
}

int main()
{
    fin >> n >> m >> x >> y;
    for (int i = 1; i <= m; i++)
    {
        int xi, yi, d;
        fin >> xi >> yi >> d;
        if (xi < yi)
        {
            G[xi].push_back(make_pair(yi, d));
            G[yi].push_back(make_pair(xi, -d));
        }
        else
        {
            G[xi].push_back(make_pair(yi, -d));
            G[yi].push_back(make_pair(xi, d));
        }
    }
    dijkstra(x);
    fout << dist[y];
    return 0;
}