Cod sursa(job #1486888)

Utilizator timicsIoana Tamas timics Data 15 septembrie 2015 17:55:45
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include<stdio.h>
#include<iostream>
#include<vector>
#include<queue>
#define fs first
#define sc second
#define mp make_pair
#define inf 2000000000
using namespace std;

int N,M,x,y,z,d[500100];
vector<pair<int,int> > m[500100];
priority_queue<pair<int,int> > pq;
bool viz[500100];

void dijkstra(int r) {
    for(int i=1;i<=N;++i) {
        d[i] = inf;
    } 
    d[r] = 0;
    pq.push(make_pair(0,r));
    while(!pq.empty()) {
        int x = pq.top().sc;
        pq.pop();
        viz[x] = 1;
        for(int i=0; i<m[x].size(); ++i) {
            int y = m[x][i].fs;
            int c = m[x][i].sc;
            if(!viz[y]) {
                if(d[y] > c + d[x]) {
                    d[y] = c + d[x]; 
                    pq.push(make_pair(-d[y],y));
                }
 
            }
        }
    }
}

int main() {
	freopen("dijkstra.in","r",stdin);
	freopen("dijkstra.out","w",stdout);
	//freopen("input.in","r",stdin);
	scanf("%d%d",&N,&M);
    for(int i=1;i<=M;++i) {
        scanf("%d%d%d",&x,&y,&z);
        m[x].push_back(mp(y,z));
        m[y].push_back(mp(x,z));
    }
    dijkstra(1); 
    for(int i=2;i<=N;++i) {
        if(d[i]!=inf) {
            printf("%d ",d[i]);
        } else {
            printf("0 ");
        }
    }
    return 0;
}