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

stdout
0 -1