Advertisement
a53

vacanta2020

a53
Aug 2nd, 2020 (edited)
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.61 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. ifstream f("vacanta2020.in");
  4. ofstream g("vacanta2020.out");
  5. vector < pair <int,int> > G[460110];
  6. long long dist[460110];
  7. bool viz[460110];
  8. int n,m,vouch;
  9. typedef pair <int,int> p;
  10. priority_queue <p, vector <p> , greater<p> > Q;
  11. # define INF 10000000000000000
  12. void read()
  13. {
  14. f>>n>>m>>vouch;
  15. int a,b,c;
  16. for(int i=1;i<=m;++i)
  17. {
  18.  
  19. f>>a>>b>>c;
  20. for(int j=0;j<=vouch;++j)
  21. {
  22. G[a+j*n].push_back({c,b+j*n});
  23. G[b+j*n].push_back({c,a+j*n});
  24. if(j!=vouch+1)
  25. {
  26. G[a+j*n].push_back({0,b+(j+1)*n});
  27. G[b+j*n].push_back({0,a+(j+1)*n});
  28. }
  29. }
  30. }
  31. }
  32. void init()
  33. {
  34. for(int i=1;i<=n*(vouch+1);++i)
  35. {
  36. dist[i]=INF;
  37. if(i%(n+1)==0)
  38. dist[i]=0;
  39. }
  40. dist[1]=0;
  41. }
  42.  
  43. void Dijkstra()
  44. {
  45. int vert;
  46. while(!Q.empty())
  47. {
  48. if(viz[Q.top().second])
  49. Q.pop();
  50. else
  51. {
  52. vert=Q.top().second;
  53. viz[vert]=true;
  54. for(int i=0;i<G[vert].size();++i)
  55. {
  56. if(dist[G[vert][i].second]>dist[vert]+G[vert][i].first)
  57. {
  58. dist[G[vert][i].second]=dist[vert]+G[vert][i].first;
  59. Q.push(make_pair(G[vert][i].first+dist[vert],G[vert][i].second));
  60.  
  61.  
  62. }
  63. }
  64. }
  65. }
  66.  
  67. }
  68.  
  69. int main()
  70. {
  71. read();
  72. init();
  73. Q.push(make_pair(0,1));
  74. Dijkstra();
  75. for(int i=n*vouch+1;i<=n*(vouch+1);++i)
  76. g<<dist[i]<<" ";
  77. return 0;
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement