Cod sursa(job #3308786)

Utilizator LucaWalucaLuca Munteanu LucaWaluca Data 28 august 2025 06:27:07
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <bits/stdc++.h>

using namespace std;

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

vector<int> dijkstra(vector<vector<pair<int, int>>>& grf, int src = 0) {
	int n = grf.size();
	const int max_ssol = 1e9 + 5;
	vector<int> ssol(n, max_ssol);
	priority_queue<pair<int, int>> proq;
	proq.push({0, src});
	ssol[src] = 0;
	while (!proq.empty()) {
		int node = proq.top().second;
		int cost = -proq.top().first;
		proq.pop();
		if (cost != ssol[node])
            continue;
		for (int i = 0; i < grf[node].size(); i++)
        {
			int next = grf[node][i].first;
			int c = grf[node][i].second;
			if (cost + c < ssol[next]) {
				ssol[next] = cost + c;
				proq.push({-ssol[next], next});
			}
		}
	}
	for (int i = 0; i < n; i++)
    {
		if (ssol[i] == max_ssol)
			ssol[i] = 0;
	}

	return ssol;
}

int main() {
	int n, m;
	in >> n >> m;
	vector<vector<pair<int, int>>> grf(n);
	for (int i = 0; i < m; i++) {
		int a, b, c;
		in >> a >> b >> c;
		a--; b--;
		grf[a].push_back({b, c});
	}
	vector<int> ssol = dijkstra(grf);
	for (int i = 1; i < n; i++) {
		out << ssol[i] << " ";
	}
	out << "\n";
}