Cod sursa(job #2436556)

Utilizator urweakurweak urweak Data 6 iulie 2019 11:59:17
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <bits/stdc++.h>
#define LMAX 100005
#define pb push_back
using namespace std;
typedef pair <int, int> PII;
vector <PII> E[LMAX];
int D[LMAX];

void Dijkstra(int k)
{
 priority_queue <PII, vector<PII>, greater<PII>> Q;
 Q.push({0, k});
 D[k] = 0;
 	 while(!Q.empty()){
 		int len = Q.top().first, nod = Q.top().second;
 		Q.pop();
 		if(len!=D[nod])
 			continue;
 		for(auto it : E[nod])
 			if(len + it.second < D[it.first]){
 				D[it.first] = len + it.second;
 				Q.push({D[it.first], it.first});
 			}
 	 }
}

int main(){
	ifstream fin("dijkstra.in");
	ofstream fout("dijkstra.out");
	int N, M;
	fin >> N >> M;
	for(int i = 1; i<=M; i++){
		int x, y, z;
		fin >> x >> y >> z;
		E[x].pb({y, z});
	}
	for(int i = 2; i<=N; i++)
		D[i] = INT_MAX;
	Dijkstra(1);
	for(int i = 2; i<=N; i++){
		if(D[i] == INT_MAX) fout << 0<<' ';
		else fout << D[i] <<' ';
	}
	return 0;
}