Cod sursa(job #2576751)

Utilizator sipdavSipos David Oliver sipdav Data 6 martie 2020 22:18:49
Problema Algoritmul lui Dijkstra Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <bits/stdc++.h>

using namespace std;

const int dim = 50010;
const int dim1 = 25010;
const int oo = (int) (1e9);

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

int n, m, dist[dim];
vector<pair<int, int> > muchii[dim];

void read()
{
    in>>n>>m;
    for(int i = 1; i <= n; i++)
        dist[i] = oo;
    int x, y, c;
    for(int i = 1; i <= m; i++)
    {
        in>>x>>y>>c;
        muchii[x].push_back({y, c});
    }
}

void dijsktra()
{
    set<pair<int, int>> s;
    dist[1] = 0;
    s.insert({1, 0});
    while(!s.empty())
    {
        int nod = s.begin()->first;
        int d = s.begin()->second;
        s.erase(s.begin());
        for(auto it : muchii[nod])
        {
            if(dist[it.first] > dist[nod] + it.second)
            {
                dist[it.first] = dist[nod] + it.second;
                s.insert({it.first, dist[it.first]});
            }
        }
    }
}

void print()
{
    for(int i = 2; i <= n; i++)
        out<<((dist[i] == oo) ? 0 : dist[i])<<' ';
}

int main()
{
    read();
    dijsktra();
    print();
    return 0;
}