Advertisement
Guest User

Untitled

a guest
Dec 5th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.91 KB | None | 0 0
  1. #include <iostream>
  2. #include <set>
  3. #include <unordered_map>
  4. #include <vector>
  5. #include <utility>
  6.  
  7. using namespace std;
  8. long E[5000][5000];
  9. unordered_map <long, set<int>> G;
  10.  
  11. #define pairs pair<int, int>
  12.  
  13. int main() {
  14. int n, m;
  15. cin>>n>>m;
  16. int s, f;
  17. cin>>s>>f;
  18. int a, b, c;
  19. for (int i = 0; i < m; i++) {
  20. cin>>a>>b>>c;
  21. E[a-1][b-1] = c;
  22. E[b-1][a-1] = c;
  23. G[a-1].emplace(b-1);
  24. G[b-1].emplace(a-1);
  25.  
  26. }
  27.  
  28. if(s == f) {
  29. cout<<0;
  30. return 0;
  31. }
  32.  
  33. long d[1000];
  34. set<int> used;
  35. set<pairs> A;
  36. int parent[1000];
  37. for (int i = 0; i < n; i++) {
  38. d[i] = 100000*5000+4;
  39. parent[n] = 0;
  40. A.insert(make_pair(100000*5000+4, i));
  41. parent[i] = -1;
  42. }
  43. A.insert(make_pair(0, s-1));
  44. bool found = false;
  45. auto x = A.begin();
  46. while(!found) {
  47. auto x = A.begin();
  48. if(x->first == 100000*5000+4) found = true;
  49. A.erase(x);
  50. if(used.find(x->second) != used.end()) continue;
  51. used.insert(x->second);
  52. if(x->second == f-1) found = true;
  53. for(auto v:G[x->second]) {
  54. if(used.find(v) == used.end()) {
  55. if (E[x->second][v] + x->first < d[v]) {
  56. d[v] = E[x->second][v] + x->first;
  57. parent[v] = x->second;
  58. A.insert(make_pair(d[v], v));
  59. }
  60. }
  61. }
  62. }
  63. vector<int> p;
  64. int l = f-1;
  65. p.push_back(l);
  66. if(d[f-1] == 100000*5000+4) cout<<-1;
  67.  
  68. else{
  69. while(true) {
  70. l = parent[l];
  71. p.push_back(l);
  72. if(l == s-1) break;
  73. }
  74. cout<<d[f-1]<<"\n";
  75. for(int i = p.size() - 1; i >=0 ; i--) {
  76. cout<<p[i]+1<<" ";
  77. }
  78. }
  79.  
  80.  
  81. return 0;
  82. }
  83. /*
  84. * 5 7
  85. 1 5
  86. 1 2 10
  87. 1 5 100
  88. 2 3 50
  89. 3 5 10
  90. 3 4 20
  91. 4 5 60
  92. 1 4 30
  93. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement