Cod sursa(job #2462439)

Utilizator AndreiJJIordan Andrei AndreiJJ Data 27 septembrie 2019 12:26:31
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <fstream>
#include <set>
#include <iostream>
#include <vector>
#include <cstring>
#define pb push_back

using namespace std;

const int N = 50005, oo = 1e9;

int n, dist[N];
vector < pair<int, int> > L[N];
set <int> s;
set <int> :: iterator it;

void Read ()
{
    int m;
    ifstream fin ("dijkstra.in");
    fin >> n >> m;
    int i, x, y, cost;
    for (i = 1; i <= m; i++)
    {
        fin >> x >> y >> cost;
        L[x].pb({y, cost});
    }
}

void Dijkstra ()
{
    for (int i = 2; i <= n; i++)
        dist[i] = oo;
    s.insert(1);
    while (!s.empty())
    {
        it = s.begin();
        cout << *it << " ";
        int x = *it;
        s.erase(s.begin());
        if (L[x].size())
            for (auto i : L[x])
                {
                    if (dist[i.first] > dist[x] + i.second)
                    {
                        dist[i.first] = dist[x] + i.second;
                        s.insert(i.first);
                    }
                }
    }
    ofstream fout ("dijkstra.out");
    for (int i = 2; i <= n; i++)
    {
        if (dist[i] == oo) dist[i] = 0;
        fout << dist[i] << " ";
    }
}

int main()
{
    Read();
    Dijkstra();
    return 0;
}