Cod sursa(job #3201764)

Utilizator nouseforanameRoberto Glont nouseforaname Data 9 februarie 2024 18:34:50
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>
#include <iostream>
#include <vector>
#include <queue>
#include <tuple>
#include <bitset>
#include <climits>

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

const int NMAX=100005, MMAX=250005;
vector<pair<int, int>> G[NMAX];
bitset<NMAX> viz;
priority_queue<pair<int, int>> pq;
int n, m, s=0, d[NMAX];
pair<int, int> sol[NMAX];

void citire()
{
    fin>>n>>m;
    for(int i=1; i<=m; ++i)
    {
        int x, y, c;
        fin>>x>>y>>c;
        G[x].push_back(make_pair(y, c));
        G[y].push_back(make_pair(x, c));
    }

}

void dijkstra(int start)
{
    for(int i=1; i<=n; ++i)
        d[i]=INT_MAX;
    d[start]=0;
    pq.push(make_pair(0, start));
    while(!pq.empty())
    {
        int nodsrc=pq.top().second;
        pq.pop();
        if(viz[nodsrc])
            continue;
        viz[nodsrc]=1;
        for(auto i: G[nodsrc])
        {
            if(d[i.first]>d[nodsrc]+i.second)
            {
                d[i.first]=d[nodsrc]+i.second;
                pq.push(make_pair(-d[i.first], i.first));
            }

        }
    }
}

int main()
{
    citire();
    dijkstra(1);
    for(int i=2; i<=n; ++i)
         fout<<d[i]<<" ";
}