Cod sursa(job #2374692)

Utilizator andreiudilaUdila Andrei andreiudila Data 7 martie 2019 19:59:05
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>
#include <cstring>
#include <vector>
#include <queue>

using namespace std;
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
int n,m,i,x,y,c;
priority_queue < pair<int,int> , vector<pair<int,int>> , greater< pair<int,int>> > q;
int cost[50500];
vector<pair<int,int>> g[50500];

void dijkstra(int x)
{

    memset(cost,0x3f,sizeof(cost));
    cost[x] = 0;
    q.push({0,x});

    while(!q.empty())
    {
        int node = q.top().second;
        int dist = q.top().first;
        q.pop();

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

        for(auto vec : g[node])
        {
            if(cost[vec.first] > dist + vec.second)
            {
                cost[vec.first] = vec.second + dist;
                q.push({vec.second+dist, vec.first});
            }
        }
    }
}
int main()
{

    cin>>n>>m;
    for(i=1;i<=m;++i)
    {
        cin>>x>>y>>c;
        g[x].push_back({y,c});
    }

    dijkstra(1);

    for(i=2;i<=n;++i)
        {
            if(cost[i] == 0x3f3f3f3f)
            {
                cout<<"0 ";
                continue;
            }

            cout<<cost[i]<<" ";

        }
    return 0;
}