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