Advertisement
Guest User

info

a guest
Dec 19th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.63 KB | None | 0 0
  1. #include<iostream>
  2. #include<fstream>
  3. #include <cstdio>
  4. #include <algorithm>
  5. #include <bitset>
  6. #include <queue>
  7. #include <vector>
  8. #include <climits>
  9. using namespace std;
  10.  
  11. typedef pair< int, int > ii;
  12.  
  13. const int dim = 1e5 + 1;
  14. const int INF = INT_MAX;
  15.  
  16. int v[100001];
  17.  
  18. vector< vector<ii> > ListaAdiacenta;
  19. int n, dist[ dim ], par[ dim ];
  20. /// dist[i] = dist de la start la i, par[i] = parintele nodului i
  21. bitset< dim > vizitat;
  22.  
  23. bool Dijkstra( int start, int tinta )
  24. {
  25. priority_queue<ii, vector<ii>, greater<ii> > pq;
  26. fill( dist, dist + n + 1, INF );
  27.  
  28. pq.push( ii(0, start) );
  29. dist[ start ] = 0;
  30. par[ start ] = -1;
  31.  
  32. while( !pq.empty() )
  33. {
  34. int vecin = pq.top().second;
  35. pq.pop();
  36.  
  37. if( vecin == tinta )
  38. return true;
  39.  
  40. vizitat[ vecin ] = true;
  41.  
  42. for( auto &pr : ListaAdiacenta[ vecin ] )
  43. {
  44. int copil = pr.first, w = pr.second;
  45.  
  46. if( vizitat[ copil ] == false && dist[ vecin ] + w < dist[ copil ] )
  47. {
  48. dist[ copil ] = dist[ vecin ] + w;
  49. pq.push( ii( dist[ copil ], copil ) );
  50. par[ copil ] = vecin;
  51. }
  52. }
  53. }
  54.  
  55. return false;
  56. }
  57.  
  58.  
  59. void initializeaza()
  60. {
  61. vizitat.reset();
  62. for( int i = 0; i <= n; ++i )
  63. dist[ i ] = par[ i ] = 0;
  64. ListaAdiacenta.clear();
  65. }
  66.  
  67. int main()
  68. {
  69. vector<int> rez;
  70.  
  71. ifstream f( "date.in" );
  72. ofstream g( "date.out" );
  73. ios::sync_with_stdio( false );
  74. cin.tie( 0 );
  75. int m,c;
  76. cin >> c;
  77. while( c-- > 0)
  78. {
  79. cin >> n >> m;
  80. initializeaza();
  81. ListaAdiacenta.resize( n + 1 );
  82.  
  83. for(int i=0 ; i<=n ; i++)
  84. ListaAdiacenta[i].push_back(ii(0,0));
  85.  
  86. int u, v, w; /// Avem muchia (u, v) de cost w
  87.  
  88. while( m-- )
  89. {
  90. cin >> u >> v >> w;
  91. ListaAdiacenta[ u ].push_back( ii( v, w ) );
  92. //ListaAdiacenta[ v ].push_back( ii( u, w ) );
  93. }
  94.  
  95. int st, fin;
  96. cin >> st >> fin;
  97. int start = st, stop = fin;
  98.  
  99. if( Dijkstra( start, stop ) == true )
  100. {
  101. vector<int> drum;
  102.  
  103. rez.push_back( dist[ stop ] );
  104.  
  105. }
  106. else
  107. rez.push_back( -1 );
  108. }
  109. for( int i = 0; i < n; ++i )
  110. if( rez[ i ] != -1 )
  111. cout << rez[ i ] << '\n';
  112. else
  113. cout << "NO" << '\n';
  114. return 0;
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement