Cod sursa(job #3325463)

Utilizator Dana1000Dana Vidroiu Dana1000 Data 25 noiembrie 2025 15:07:14
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include<iostream> 
#include<fstream>
#include<vector>
#include<queue>

using namespace std;
ifstream fcin("dijkstra.in");
ofstream fcout("dijkstra.out");

const int INF = 1e9;
vector<pair<int,int>> lista_adiacenta[50005];
int dist[50005];



int main()
{
	int n, m, a, b, c;
	fcin >> n >> m; 
	for (int i = 0; i < m; i++)
	{
		fcin >> a >> b >> c;
		lista_adiacenta[a].push_back({ b, c });
	}

	for (int i = 1; i <= n; i++)
		dist[i] = INF;
	dist[1] = 0;

	priority_queue<
		pair<int, int>,
		vector<pair<int, int>>,
		greater<pair<int, int>>
	>pq;

	pq.push({ 0, 1 });

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

		if (d != dist[nod])
			continue;

		for (auto& edge : lista_adiacenta[nod])
		{
			int vecin = edge.first;
			int cost = edge.second;

			if (dist[vecin] > dist[nod] + cost)
			{
				dist[vecin] = dist[nod] + cost;
				pq.push({ dist[vecin], vecin });
			}
		}
	}

	for (int i = 2; i <= n; i++)
	{
		if (dist[i] == INF)
			fcout << 0 << " ";
		else
			fcout << dist[i] << " ";
	}

	return 0;
}