Cod sursa(job #1401238)

Utilizator 4ONI2015oni2015 4ONI2015 Data 25 martie 2015 18:38:54
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <bits\stdc++.h>
#define pb push_back
#define mp make_pair
#define pii pair<int,int>
#define oo  1<<30
#define N 50005

using namespace std;
vector<pii>v[N];
priority_queue<pii, vector<pii>, greater<pii>>q;
bitset<N>inq;
int d[N], n, m, x, y, nod, c, i;
int main()
{
    freopen("dijkstra.in", "r", stdin);
    freopen("dijkstra.out", "w", stdout);
    scanf("%d%d", &n, &m);
    for(; m; m--)
    {
        scanf("%d%d%d", &x, &y, &c);
        v[x].pb(mp(y, c));
        v[y].pb(mp(x, c));
    }
    for(i = 2; i <= n; i++)
        d[i] = oo;
    q.push(mp(0, 1));
    inq[1] = 1;
    while(q.size())
    {
        nod = q.top().second;
        inq[nod] = 0;
        q.pop();
        for(auto it : v[nod])
        {
            if(d[it.first] > d[nod] + it.second)
            {
                d[it.first] = d[nod] + it.second;
                if(!inq[it.first])
                    q.push(make_pair(d[it.first], it.first));
            }
        }
    }
    for(i = 2; i <= n; i++)
        d[i] == oo ? printf("0 ") : printf("%d ", d[i]);
    return 0;
}