Cod sursa(job #1426553)

Utilizator UAIC_HreapcaVlasNegrusUAIC Hreapca Vlas Negrus UAIC_HreapcaVlasNegrus Data 29 aprilie 2015 21:51:51
Problema Algoritmul lui Dijkstra Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <deque>
#include <vector>
#include <cstring>
#include <bitset>
#include <algorithm>
#include <queue>
#define INF 1<<30
#define uint unsigned int
#define ll long long
using namespace std;

int N, M, i, x, y, v, dist[50010];
vector<pair<int,int> > V[50010];
priority_queue<pair<int,int>, vector<pair<int,int> >, greater<pair<int,int> > > Q;


int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    scanf("%d%d", &N, &M);
    while(M--)
    {
        scanf("%d%d%d", &x, &y, &v);
        V[x].push_back(make_pair(y, v));
    }
    for(i=1;i<=N;i++)
        dist[i] = INF;
    dist[1] = 0;
    Q.push(make_pair(0, 1));
    while(!Q.empty())
    {
        x = Q.top().second;
        for(vector<pair<int,int> >::iterator it = V[x].begin();it!=V[x].end();it++)
        {
            if(dist[it->first] > dist[x] + it->second)
            {
                dist[it->first] = dist[x] + it->second;
                Q.push(make_pair(dist[it->first], it->first));
            }
        }
        Q.pop();
    }
    for(i=2;i<=N;i++)
    {
        if(dist[i] >= INF)
            printf("0 ");
        else
            printf("%d ", dist[i]);
    }
    return 0;
}