Cod sursa(job #2460436)

Utilizator sichetpaulSichet Paul sichetpaul Data 23 septembrie 2019 18:53:15
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <bits/stdc++.h>
#define Nmax 50005
#define pi pair<int, int>
using namespace std;

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

vector <pi> v[Nmax];
priority_queue <pi, vector<pi>, greater<pi> > q;
int N, M;
int ans[Nmax];
bool vis[Nmax];
int main()
{
    f >> N >> M;
    for (int i = 1; i <= N; ++i) {
        int x, y, d;
        f >> x >> y >> d;
        v[x].push_back(make_pair(d, y));
    }

    q.push(make_pair(0, 1));

    while (!q.empty()) {
        int dist = q.top().first;
        int node = q.top().second;
        ans[node] = dist;
        vis[node] = 1;
        q.pop();

        for (auto it: v[node])
          if (!vis[it.second]) {
            int dist2 = dist + it.first;
            int node2 = it.second;
            q.push(make_pair(dist2, node2));
        }

        while (!q.empty() && vis[q.top().second])
              q.pop();
    }

    for (int i = 2; i <= N; ++i)
        g << ans[i] << ' ';

    return 0;
}