Cod sursa(job #2764837)

Utilizator bubblegumixUdrea Robert bubblegumix Data 22 iulie 2021 21:05:42
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include<iostream>
#include<fstream>
#include<queue>
#include<vector>
#define inf 0x3f3f3f3f
#define NMAX 50010
#define MMAX 5*NMAX
using namespace std;

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

int D[NMAX];
struct cmp
{
	bool operator()(int a, int b)
	{
		return D[a] > D[b];
	}
};
priority_queue<int, vector<int>, cmp> coada;
vector<pair<int,int>> graph[NMAX];
int n, m;
int main()
{
	cin >> n >> m;
	for (int i = 1; i <= m; i++)
	{
		int x, y,c;
		cin >> x >> y>>c;
		graph[x].push_back({ y,c });
	}
	for (int i = 1; i <= n; i++)
		D[i] = inf;
	D[1] = 0;
	coada.push(1);
	while (!coada.empty())
	{
		int extract = coada.top();
		coada.pop();
		for (auto it : graph[extract])
		{
			int vec = it.first;
			int cost = it.second;
			if (D[extract] + cost < D[vec])
			{
				D[vec] = D[extract] + cost;
				coada.push(vec);
			}
		}
	}
	for (int i = 2; i <= n; i++)
	{
		if (D[i] == inf)
			D[i] = 0;
		cout << D[i] << " ";
	}
}