Cod sursa(job #3030737)

Utilizator MedenMeden Meden Meden Data 17 martie 2023 20:42:01
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <bits/stdc++.h>
#define Inf 0x3f3f3f3f

using namespace std;


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

using PI = pair<int , int>;
int n , m , x , y , p , D[100001] , w;
vector <PI> G[100001];

void dijkstra(int nod)
{
    priority_queue < PI , vector<PI> , greater<PI> > Q;
    D[nod] = 0;
    Q.push({0 , nod});
    while(!Q.empty())
    {
       x = Q.top().first;
       y = Q.top().second;
       Q.pop();
       if(x > D[y]) continue;
       for(auto& q:G[y])
       {
           int nodnou = q.first;
           int costnou = q.second;
           if(D[nodnou] > D[y] + costnou)
           {
               D[nodnou] = D[y] + costnou;
               Q.push({D[nodnou] , nodnou});
           }
       }
    }
}

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

    for(int i = 1 ; i <= n ; i++)
        D[i] = Inf;
    dijkstra(1);
    for(int i = 2 ; i <= n ; i++)
        if(D[i] == Inf) fout << "0 ";
        else fout << D[i] << " ";
}