Cod sursa(job #1821982)

Utilizator MickeyTurcu Gabriel Mickey Data 3 decembrie 2016 23:35:05
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include<fstream>
#include<string.h>
#include<ctype.h>
#include<iostream>
#include<algorithm>
#include<map>
#include<unordered_map>
#include<array>
#include<deque>
#include<math.h>
#include<unordered_set>
#include<queue>
#include<set>
#include<iomanip>
#include<bitset>
using namespace std;
int n, m,i,j,k,x,y,cost[50500],crcost;
vector<pair<int, int>>v[50500];
pair<int, int>el;
priority_queue<pair<int, int>>que;
int main()
{
	//ifstream f("file.in");
	//ofstream g("file.out");
	ifstream f("dijkstra.in");
	ofstream g("dijkstra.out");
	f >> n >> m;
	for (i = 1; i <= m; i++)
	{
		f >> x >> y >> crcost;
		v[x].push_back({ y,crcost });
		v[y].push_back({ x,crcost });
	}
	for (i = 2; i <= n; i++)
		cost[i] = 1 << 30;
	que.emplace(make_pair(1,0));
	while (que.size() != 0)
	{
		el = que.top();
		que.pop();
		for (auto it = v[el.first].begin(); it != v[el.first].end(); it++)
			if (cost[it->first] > cost[el.first] + it->second)
			{
				//if (cost[it->first] ==1<<30)	
				cost[it->first] = cost[el.first] + it->second;
				que.emplace(make_pair(it->first, it->second));
			}
	}
	for (i = 2; i <= n; i++)
		g << cost[i] << ' ';
	return 0;
}