Cod sursa(job #3286948)

Utilizator AndreasBossGamerBaragau Andreas AndreasBossGamer Data 14 martie 2025 20:44:30
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#include <climits>
#include <algorithm>
#include <vector>
#include <queue>

using namespace std;

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

struct ceva
{
	int nod;
	long long cost;

	bool operator<(const ceva& temp) const
	{
		return cost > temp.cost;
	}
};

int n, m;

vector<vector<ceva>> adj;
vector<long long> dist;
vector<bool> vizitat;

void distra(int startingNode)
{
	priority_queue<ceva> q;
	q.push({ startingNode, 0 });
	dist[startingNode] = 0;

	while (!q.empty())
	{
		ceva cur = q.top();
		q.pop();

		if (!vizitat[cur.nod])
		{
			vizitat[cur.nod] = true;
			for (auto vecin : adj[cur.nod])
			{
				if (dist[vecin.nod] > (dist[cur.nod] + vecin.cost))
				{
					dist[vecin.nod] = (dist[cur.nod] + vecin.cost);
					q.push({ vecin.nod, dist[vecin.nod] });
				}
			}
		}
	}
}

int main()
{
	cin >> n >> m;
	adj.resize(n + 1);
	dist.resize(n + 1, LLONG_MAX);
	vizitat.resize(n + 1, false);
	for (int i = 1; i <= m; i++)
	{
		int x, y, cost;
		cin >> x >> y >> cost;
		adj[x].push_back({y, cost});
	}

	distra(1);

	for (int i = 2; i <= n; i++)
		cout << dist[i] << " ";
}