Cod sursa(job #2897625)

Utilizator cyg_TheoPruteanu Theodor cyg_Theo Data 4 mai 2022 12:22:57
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#include <queue>

using namespace std;

typedef long long ll;
const int NMAX = 2e5+5;

ll dist[NMAX];
vector <pair <int, int> > G[NMAX];

void solve(){

	int n, m;
	scanf("%d%d", &n, &m);

	int u, v, c;
	for(int i=0; i<n; ++i){
		scanf("%d %d %d", &u, &v, &c);
		G[u].push_back({v, c});
	}

	for(int i=0; i<=n; ++i)
		dist[i] = -1;

	priority_queue <pair <int,int> > pq;
	pq.push({0, 1});

	while(!pq.empty()){
		int u = pq.top().second;
		int d = -pq.top().first;
		pq.pop();

		if(dist[u] != -1)
			continue;

		dist[u] = d;

		for(auto &e: G[u]){
			int v = e.first;
			int c = e.second;
			pq.push({-c-d, v});
		}
	}

	for(int i=2; i<=n; ++i)
		printf("%lld ", dist[i] != -1 ? dist[i] : 0);
	printf("\n");
}

int main(){

	int t = 1;
	freopen("dijkstra.in", "r", stdin);
	freopen("dijkstra.out", "w", stdout);

	for(int i=0; i<t; ++i){
		/* printf("Case #%d: ", i+1); */
		solve();
	}

	return 0;
}