Cod sursa(job #3230048)

Utilizator stefanchpStefan Chiper stefanchp Data 18 mai 2024 22:49:57
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.4 kb
#include <iostream>
#include <set>
#include <fstream>
#include <vector>
using namespace std;

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

set <pair<int, int>> s;
int d[50001], n;
vector <pair<int, int>> g[50001];

void dijkstra(int nod)
{
    for (int i = 1; i <= n; i++)
        d[i] = 1e9;

    d[nod] = 0;
    int ct = 0;
    s.insert({ 0,nod });
    for (int i = 1; i <= n; i++)
        if (i != nod)
            s.insert({ 1e9,i });

    while (ct < n)
    {
        int node = s.begin()->second;
        int val = s.begin()->first;

        s.erase(s.begin()); //s.erase({val,node});
        for (int i = 0; i < g[node].size(); i++)
        {
            if (d[node] + g[node][i].second < d[g[node][i].first])
            {
                s.erase({ d[g[node][i].first], g[node][i].first });
                s.insert({ d[node] + g[node][i].second, g[node][i].first });
                d[g[node][i].first] = d[node] + g[node][i].second;
            }
        }
        ct++;
    }
    s.clear();
}

int main()
{
    int m, x, y, c;
    fin >> n >> m;
    for (int i = 1; i <= m; i++)
    {
        fin >> x >> y >> c;
        g[x].push_back({ y,c });
        g[y].push_back({ x,c });
    }
    dijkstra(1);
    for (int i = 2; i <= n; i++)
        if (d[i] == 1e9)
            fout << 0 << ' ';
        else
            fout << d[i] << ' ';
	return 0;
}