Cod sursa(job #2888168)

Utilizator lolismekAlex Jerpelea lolismek Data 10 aprilie 2022 19:05:55
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <bitset>
#include <queue>

#define int long long
#define pii pair <int, int>

using namespace std;

ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");

const int N = 5e4, inf = 1e18;
int dist[N + 1];

vector <pii> adj[N + 1];
bitset <N + 1> viz;
priority_queue <pii> pq;

void djk(int source){
	pq.push({0, source}); // {cost, nod}

	while(!pq.empty()){
		int nod = pq.top().second;
		pq.pop();

		if(!viz[nod]){
			for(auto vec : adj[nod]){
				if(vec.second + dist[nod] < dist[vec.first]){
					dist[vec.first] = vec.second + dist[nod];
					pq.push({-dist[vec.first], vec.first});
				}
			}
			viz[nod] = 1;
		}
	}

}

signed main(){
	int n, m;
	fin >> n >> m;

	for(int i = 1; i <= m; i++){
		int a, b, c;
		fin >> a >> b >> c;
		adj[a].push_back({b, c});
	}

	for(int i = 2; i <= n; i++)
		dist[i] = inf;

	djk(1);

	for(int i = 2; i <= n; i++)
		fout << (dist[i] != inf) * dist[i] << ' ';
	return 0;
}