Cod sursa(job #2573531)

Utilizator victorzarzuZarzu Victor victorzarzu Data 5 martie 2020 18:02:11
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <bits/stdc++.h>
#define oo 0x3f3f3f3f
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n, m;
int x, y, c;
vector<pair<int, int>> graf[50005];
int dist[50001];

void Read()
{
    f>>n>>m;
    for(int i = 1;i <= m;++i)
    {
        f>>x>>y>>c;
        graf[x].push_back({y, c});
    }
}

void Dijkstra()
{
    for(int i = 1;i <= n;++i)
        dist[i] = oo;
    dist[1] = 0;
    set<pair<int,int>> h;
    h.insert({0, 1});
    while(!h.empty())
    {
        int nod = h.begin() -> second;
        h.erase(h.begin());
        for(vector<pair<int,int>>::iterator it = graf[nod].begin();it != graf[nod].end();++it)
        {
            int vecin = (*it).first;
            int cost = (*it).second;

            if(dist[vecin] > dist[nod] + cost)
            {
                if(dist[vecin] != oo)
                    h.erase(h.find({dist[vecin], vecin}));
                dist[vecin] = dist[nod] + cost;
                h.insert({dist[vecin], vecin});
            }
        }
    }
    for(int i = 2;i <= n;++i)
        g<<dist[i]<<" ";
    g.close();
    f.close();
}

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