Cod sursa(job #3213444)

Utilizator andrei_C1Andrei Chertes andrei_C1 Data 13 martie 2024 10:03:27
Problema Algoritmul lui Dijkstra Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 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);
	vector<bool> vis(n);
	dist[s] = 0;
	for(int i = 1; i < n; i++) {
		int u = -1;
		for(int i = 0; i < n; i++) {
			if(!vis[i] && (u == -1 || dist[i] < dist[u])) {
				u = i;
			}
		}
		vis[u] = 1;
		for(const auto &[v, c]: adj[u]) {
			if(dist[v] > dist[u] + c) {
				dist[v] = dist[u] + c;
			}
		}
	}
	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);
	}
	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;
}