Cod sursa(job #3203352)

Utilizator AlexMoto2006Motoasca Alexandru-Lucian AlexMoto2006 Data 13 februarie 2024 15:52:12
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <vector>
#include <queue>
using namespace std;

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

vector<vector<pair<int,int>>> v;
int n,m,x,y,c;
int viz[50001];
int max1 = 2000001;
queue <pair<int,int>> q;
int d[50001];

void dijkstra(int x)
{
	for (int i = 1; i <= n; i++)
	{
		d[i]=max1;
	}
	d[x] = 0;
	q.push({ x,0 });
	while (!q.empty())
	{
		x=q.front().first;
		q.pop();
		if (viz[x] == 1)
		{
			continue;
		}
		viz[x] = 1;
		for (int i = 0; i < v[x].size(); i++)
		{
			y=v[x][i].first;
			c=v[x][i].second;
			if (d[y] > d[x] + c)
			{
				d[y] = d[x] + c;
				q.push({ y,d[y] });
			}
		}
	}
}

int main()
{
	cin >> n >> m;
	v=vector<vector<pair<int,int>>>(n+1);
	for (int i = 1; i <= m; i++)
	{
		cin >> x >> y >> c;
		v[x].push_back({ y,c });
	}
	dijkstra(1);
	for (int i = 2; i <= n; i++)
	{
		if (d[i] == max1)
		{
			cout << 0 <<" ";
		}
		else
		{
			cout << d[i] << " ";
		}
	}
    return 0;
}