fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <bits/stdc++.h>
  4.  
  5. using namespace std;
  6.  
  7. struct arco {
  8. int fine;
  9. int peso;
  10. };
  11.  
  12. void mincammino(int N, int M, vector<int> X, vector<int> Y, vector<int> P, vector<long long int> &D) {
  13. vector<arco> list[N];
  14. D.resize(N);
  15. // Build adjacency list
  16. for (int i = 0; i < M; i++) {
  17. arco tmp;
  18. tmp.fine = Y[i];
  19. tmp.peso = P[i];
  20. list[X[i]].push_back(tmp);
  21. D[X[i]] = -1;
  22. D[tmp.fine] = -1;
  23. }
  24. for(int i=0; i<N; i++) D[i] = INT_MAX;
  25. priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
  26. pq.push(make_pair(0, 0));
  27. D[0] = 0;
  28. while (!pq.empty()) {
  29. int nodo = pq.top().second;
  30. pq.pop();
  31. for (arco next: list[nodo]) {
  32. if (D[nodo] + next.peso < D[next.fine] || D[next.fine] == -1) {
  33. D[next.fine] = D[nodo] + next.peso;
  34. pq.push(make_pair(D[next.fine], next.fine));
  35. }
  36. }
  37. }
  38. }
  39. int main() {
  40. int N, M;
  41. cin >> N >> M;
  42.  
  43. vector<int> X(M), Y(M), P(M);
  44. vector<long long> D(N);
  45.  
  46. for (int i = 0; i < M; i++) {
  47. cin >> X[i] >> Y[i] >> P[i];
  48. }
  49.  
  50. mincammino(N, M, X, Y, P, D);
  51.  
  52. for (int i = 0; i < N; i++) {
  53. cout << D[i] << ' ';
  54. }
  55. cout << '\n';
  56. }
  57.  
Success #stdin #stdout 0s 5320KB
stdin
5 7
0 1 1
0 2 1
1 3 1
2 1 1
3 2 1
3 4 1
2 4 1
stdout
0 1 1 2 2