Cod sursa(job #3213430)

Utilizator andrei_C1Andrei Chertes andrei_C1 Data 13 martie 2024 09:58:13
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <bits/stdc++.h>
using namespace std;

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

const int kInf = 1e9;

vector<int> dij(int s, const vector<vector<pair<int, int>>> &adj) {
	int n = adj.size();
	vector<int> dist(n, kInf);
	struct node_t {
		int u, d;
		node_t() {}
		node_t(int u, int d): u(u), d(d) {}
		bool operator <(const node_t &oth) const {
			return d < oth.d;
		}
	};
	priority_queue<node_t> pq;
	dist[s] = 0;
	pq.emplace(s, dist[s]);
	while(!pq.empty()) {
		auto [u, d] = pq.top();
		pq.pop();
		if(d != dist[u]) continue;
		for(const auto &[v, c]: adj[u]) {
			if(dist[v] > d + c) {
				dist[v] = d + c;
				pq.emplace(v, dist[v]);
			}
		}
	}
	return dist;
}

int main() {
	int n, m;
	fin >> n >> m;
	vector<vector<pair<int, int>>> adj(n);
	for(int i = 0; i < m; i++) {
		int u, v, c;
		fin >> u >> v >> c;
		u--; v--;
		adj[u].emplace_back(v, c);
		adj[v].emplace_back(u, c);
	}
	vector<int> dist = dij(0, adj);
	for(int i = 1; i < n; i++) {
		if(dist[i] == kInf) {
			fout << "0 ";
		} else {
			fout << dist[i] << " ";
		}
	}
	return 0;
}