Cod sursa(job #2203368)

Utilizator vlcmodanModan Valentin vlcmodan Data 12 mai 2018 01:44:20
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.42 kb
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<set>
#include<unordered_set>
#include<bitset>
#include<limits>
using namespace std;


int inf = 0xFFFFFFF;

#define pp pair<int,int>
#define vpp vector<pp>
#define m_p make_pair

vector<pair<int, int>> vec[100];


int distanta[50033];
int n, m;

void dijkstra() {
	int ma = inf;
	memset(distanta,15 , 100);
	inf = distanta[1];
	distanta[1] = 0;
	set<pp> h;
	h.insert(m_p(0, 1));

	while (!h.empty()) {
		int node = h.begin()->second;
		int dist = h.begin()->first;
		h.erase(h.begin());
		for (vpp::iterator it = vec[node].begin(); it != vec[node].end(); it++) {
			int to = it->second;
			int cost = it->first;

			if (distanta[to] > cost + distanta[node]) {
				if (distanta[to] != inf) {
					h.erase(h.find(m_p(to,distanta[to])));
				}

				distanta[to] = cost + distanta[node];
				h.insert(m_p(distanta[to], to));
			}
		}
	}
	
 }

void read() {
	int x, y, length;
	scanf("%d %d", &n, &m);
	
	
	for (int i = 1; i <= m; i++) {
		scanf("%d %d %d", &x, &y, &length);
	
		vec[x].push_back(m_p(length,y));
	}

}

void afisare() {
	for (int i = 2; i <= n; i++) {
			printf("%d ", distanta[i] == inf ? 0 : distanta[i]);
		
	}
}

int main() {
	freopen("dijkstra.in", "r", stdin);
	freopen("dijkstra.out", "w", stdout);

	read();
	dijkstra();
	afisare();


	
	return 0;
}