Cod sursa(job #2802625)

Utilizator sireanu_vladSireanu Vlad sireanu_vlad Data 18 noiembrie 2021 15:57:43
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
 
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
 
const int oo = 2e9;
int n, d[50001];
bool f[50001];
struct elem {int id, cost;};
vector<elem> g[50001];

struct comp
{
	bool operator()(int i, int j)
	{
		return d[i] > d[j];
	}
};
priority_queue<int, vector<int>, comp> q;
 
void read()
{
	int x, y, c, m;
	in >> n >> m;
	while(m--)
		in >> x >> y >> c,
		g[x].push_back({y, c});
}
 
void dijkstra()
{
	for(int i = 2; i <= n; ++i)
		d[i] = oo;
 
	q.push(1);
	f[1] = 1;
 
	int x;
	while(!q.empty())
	{
		x = q.top();
		f[x] = 0;
		q.pop();
		for(auto i : g[x])
			if(d[x] + i.cost < d[i.id])
			{
				d[i.id] = d[x] + i.cost;
				if(f[i.id] == 0)
					q.push(i.id),
					f[i.id] = 1;
			}
	}
}
 
void afis()
{
	for(int i = 2; i <= n; ++i)
		out << (d[i] != oo ? d[i] : 0) << ' ';
}
 
int main()
{
	read();
	dijkstra();
	afis();
	return 0;
}