Cod sursa(job #3253385)

Utilizator radu1331Mocan Radu radu1331 Data 2 noiembrie 2024 13:45:59
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <queue>
#include <climits>
#include <vector>
#include <algorithm>
using namespace std;

bool vis[50005];
int d[50005], n;
vector<pair<int, int>> adj[50005];
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> Q;

void dijkstra(pair<int, int> nod)
{
	Q.push(nod);	

	while(!Q.empty())	
	{
		int min = Q.top().second;
		int dist = Q.top().first;
		Q.pop();
		if(dist > d[min]) continue;

		for(auto it : adj[min])
		{
			if(d[it.second] > d[min] + it.first)
				d[it.second] = d[min] + it.first,
				Q.push({d[it.second], it.second});	
		}
	}
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
  	(void)! freopen("dijkstra.in", "r", stdin);
  	(void)! freopen("dijkstra.out", "w", stdout);
	int m, x, y, z; cin >> n >> m;
	while(m--)
	{
		cin >> x >> y >> z;
		adj[x].push_back({z, y});
	}
	for(int i = 2; i <= n; ++i)
		d[i] = INT_MAX;
	dijkstra({0, 1});
	for(int i = 2; i <= n; ++i)
	{
		if(d[i] == INT_MAX) d[i] = 0;
		cout << d[i] << ' ';
	}
	return 0;
}