Cod sursa(job #1974032)

Utilizator infomaxInfomax infomax Data 26 aprilie 2017 17:47:52
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <bits/stdc++.h>

using namespace std;

ifstream F("dijkstra.in");
ofstream G("dijkstra.out");

const int inf = 1 << 30;
int d[100005], z[100005], x, y, c, p, n, m, a;
vector <pair<int, int> > graf[100005];
priority_queue <pair<int, int> > pq;

int main()
{
    F >> n >> m;
    for(int i = 0; i < m; ++ i)
    {
        F >> x >> y >> c;
        graf[x].push_back({y, c});
        graf[y].push_back({x, c});
    }
    for(int i = 2; i <= n; ++ i)
        d[i] = inf;
    pq.push({0, 1});
    while(!pq.empty())
    {
        a = pq.top().second;
        pq.pop();
        if(z[a]) continue;
        z[a] = 1;
        for(auto i : graf[a])
        {
            if(d[a] + i.second < d[i.first])
            {
                d[i.first] = d[a] + i.second;
                pq.push({-d[i.first], i.first});
            }
        }
    }
    for(int i = 2; i <= n; ++ i)
        d[i] == inf ? G << "-1 " : G << d[i] << " ";
    return 0;
}