Cod sursa(job #2573539)

Utilizator victorzarzuZarzu Victor victorzarzu Data 5 martie 2020 18:04:47
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 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(make_pair(y, c));
    }
}

void Dijkstra()
{
    memset(dist, oo, sizeof(dist));
    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(make_pair(dist[vecin], vecin)));
                dist[vecin] = dist[nod] + cost;
                h.insert(make_pair(dist[vecin], vecin));
            }
        }
    }
    for(int i = 2;i <= n;++i)
        g<<(dist[i] == oo ? 0 : dist[i])<<" ";
    g.close();
    f.close();
}

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