Cod sursa(job #2138080)

Utilizator gruhtenZinnenberg Gruhten gruhten Data 21 februarie 2018 12:38:09
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <vector>
#include <iostream>
#include <fstream>
#include <string.h>
#include <queue>

using namespace std;

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

const int maxn = 50005;
const int oo = 0x3f3f3f3f;

int n, m, dist[maxn];
vector <pair<int, int> > G[maxn];
priority_queue<pair<int, int> > Q;

inline void dijkstra(int stnode)
{
    for(int i=1;i<=n;++i)
        dist[i]=oo;
    dist[stnode] = 0;
    Q.push(make_pair(0, stnode));
    while(!Q.empty())
    {
        int node = Q.top().second;
        int cost = -Q.top().first;
        Q.pop();
        if(cost > dist[node])
            continue;
        for(int i=0;i<G[node].size();++i)
        {
            if(dist[G[node][i].first] > cost + G[node][i].second)
            {
                dist[G[node][i].first] = cost + G[node][i].second;
                Q.push(make_pair(-dist[G[node][i].first], G[node][i].first));
            }
        }

    }

}

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

    for(int i = 2; i <=n; ++ i)
        if(dist[i] != oo)
            fout << dist[i] <<" ";
        else
            fout << 0 << " ";
}