Cod sursa(job #2280207)

Utilizator cosceexcosceex cosceex Data 10 noiembrie 2018 12:44:51
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <bits/stdc++.h>
#define oo 100000000
using namespace std;

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

vector < vector < pair < int , int > > > Graf;

vector <int> dijkstra(int node , int n)
{
    vector <int> dist(n,oo);
    dist[node]=0;
    priority_queue<pair <int , int> , vector < pair <int ,int> > , greater <pair <int , int> > > PQ;
    PQ.push({0,node});

    while(!PQ.empty()){
        int node2=PQ.top().second;
        int cost=PQ.top().first;
        PQ.pop();

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

        for(auto x: Graf[node2])
        {
            if(cost + x.second < dist[x.first]){
                dist[x.first] = cost + x.second;
                PQ.push({dist[x.first],x.first});
            }
        }
    }
    return dist;
}

int main()
{
    int n,m;
    int x,y,z;
    f>>n>>m;
    Graf.resize(n);
    for(int i=1;i<=m;i++)
    {
        f>>x>>y>>z;
        Graf[x-1].push_back({y-1,z});
    }
    vector <int> dist=dijkstra(0,n);
   // dijkstra(1,n);
    for(int i=1;i<n;i++)
    {
        if(dist[i]==oo)
            g<<"0 ";
        else
            g<<dist[i]<<" ";
    }
    return 0;
}