Cod sursa(job #1147472)

Utilizator timicsIoana Tamas timics Data 19 martie 2014 21:13:51
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<queue>
#define inf 2000000000
using namespace std;

int d[50010],N,M,x,y,c;
bool v[50010];
pair<int,int> m;

priority_queue < pair < int,int > > pq;

vector<pair<int,int> > a[50010];

int main() {

    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);

    scanf("%d%d",&N,&M);
    
    for(int i=2;i<=N;++i) {
        d[i] = inf;
    }

    for(int i=1;i<=M;++i) {
        scanf("%d%d%d",&x,&y,&c);
        a[x].push_back(make_pair(y,c));
    }

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

    while(!pq.empty()) {

        m = pq.top();
        pq.pop();
        int x = m.second;
        v[x]=1;
        for(int i=0;i<a[x].size();++i) {
            m = a[x][i];
            if(!v[m.first]) {
                if(d[m.first] > m.second + d[x]) {
                    d[m.first] = m.second + d[x]; 
                    pq.push(make_pair(-d[m.first],m.first));
                }

            }
        }
    }

    for(int i=2;i<=N;++i) {
        if(d[i]!=inf) {
            printf("%d ",d[i]);
        } else {
            printf("0 ");
        }
    }
    return 0;
}