Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.32 KB | None | 0 0
  1. #include <iostream>
  2. #include <queue>
  3. #include <vector>
  4.  
  5. #define INF 1000000002
  6. #define f first
  7. #define waga second
  8.  
  9. using namespace std;
  10.  
  11. std::priority_queue<pair<int,int>, std::vector<pair<int,int> >, std::greater<pair<int, int> > > kolejka;
  12. vector <pair<int,int> > graf[200003];
  13.  
  14.  
  15. int k,w;
  16. int droga[100002];
  17.  
  18.  
  19.  
  20. void dijkstra(int s)
  21. {
  22.  
  23. kolejka.pop();
  24.  
  25.  
  26. for(int i=0; i<graf[s].size(); i++)
  27. {
  28.  
  29. if(droga[ graf[s][i].f ] > droga[ s ] + graf[s][i].waga)
  30. {
  31. droga[ graf[s][i].f ] = droga[ s ] + graf[s][i].waga;
  32. kolejka.push(make_pair( droga[ graf[s][i].f ], graf[s][i].f ));
  33. }
  34.  
  35. }
  36.  
  37. }
  38.  
  39. int main()
  40. {
  41. cin>>w>>k;
  42.  
  43.  
  44. int t1,t2,t3;
  45. for(int i=0; i<k; i++)
  46. {
  47. cin>>t1>>t2>>t3;
  48. //graf[t1].push_back(make_pair(t2,t3));
  49. graf[t2].push_back(make_pair(t1,t3));
  50. }
  51.  
  52.  
  53. for(int i=0; i<=w; i++)
  54. {
  55. droga[i]=INF;
  56. }
  57.  
  58. droga[1]=0;
  59.  
  60. kolejka.push(make_pair(0,1));
  61.  
  62. while(!kolejka.empty())
  63. {
  64. if(droga[ kolejka.top().second ] < kolejka.top().first) kolejka.pop();
  65. else dijkstra(kolejka.top().second);
  66. }
  67.  
  68.  
  69. for(int i=1; i<=w; i++)
  70. {
  71. if(droga[i]==INF) cout<<"+oo\n";
  72. else cout<<droga[i]<<"\n";
  73. }
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement