Cod sursa(job #1974182)

Utilizator infomaxInfomax infomax Data 27 aprilie 2017 00:15:20
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <bits/stdc++.h>
#define mp make_pair

using namespace std;

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

const int inf = 1 << 30;
int d[50005], z[50005], x, y, c, p, n, m, a;
vector <pair<int, int> > graf[50005];
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(mp(y, c));
        graf[y].push_back(mp(x, c));
    }
    for(int i = 2; i <= n; ++ i)
        d[i] = inf;
    pq.push(mp(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(mp(-d[i.first], i.first));
            }
        }
    }
    for(int i = 2; i <= n; ++ i)
        d[i] == inf ? G << "0 " : G << d[i] << " ";
    return 0;
}