Cod sursa(job #2929222)

Utilizator k20ySabaceag Marius k20y Data 25 octombrie 2022 12:01:20
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <bits/stdc++.h>
using namespace std;

#define pb push_back
#define pp pair<int,int>

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

const int N=5e4+5;

vector<pp> la[N];
int cost[N],dist[N];
bool vizitat[N];

void dijkstra(int start, int n)
{
    for(int i=1;i<=n;i++)
        if(i!=start) dist[i]=INT_MAX;

    priority_queue<pp,vector<pp>,greater<pp> > pq;

    vizitat[start]=1;
    pq.push({0,start});

    while(!pq.empty())
    {
        int nod=pq.top().second;
        int cost=pq.top().first;
        pq.pop();

        if(dist[nod] != cost) continue;

        for(int i=0;i<la[nod].size();i++)
        {
            pp vecin=la[nod][i];

            if(cost + vecin.second < dist[vecin.first])
            {
                dist[vecin.first]=cost + vecin.second;
                pq.push({dist[vecin.first],vecin.first});
            }
        }
    }

}

int main()
{
    int n,m; in>>n>>m;

    for(int i=1;i<=m;i++)
    {
        int x,y,c; in>>x>>y>>c;

        la[x].pb({y,c});
    }

    dijkstra(1,n);

    for(int i=2;i<=n;i++)
        if(dist[i] == INT_MAX) out<<0<<' ';
    else out<<dist[i]<<' ';

}