Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<fstream>
- #include <cstdio>
- #include <algorithm>
- #include <bitset>
- #include <queue>
- #include <vector>
- #include <climits>
- using namespace std;
- typedef pair< int, int > ii;
- const int dim = 1e5 + 1;
- const int INF = INT_MAX;
- int v[100001];
- vector< vector<ii> > ListaAdiacenta;
- int n, dist[ dim ], par[ dim ];
- /// dist[i] = dist de la start la i, par[i] = parintele nodului i
- bitset< dim > vizitat;
- bool Dijkstra( int start, int tinta )
- {
- priority_queue<ii, vector<ii>, greater<ii> > pq;
- fill( dist, dist + n + 1, INF );
- pq.push( ii(0, start) );
- dist[ start ] = 0;
- par[ start ] = -1;
- while( !pq.empty() )
- {
- int vecin = pq.top().second;
- pq.pop();
- if( vecin == tinta )
- return true;
- vizitat[ vecin ] = true;
- for( auto &pr : ListaAdiacenta[ vecin ] )
- {
- int copil = pr.first, w = pr.second;
- if( vizitat[ copil ] == false && dist[ vecin ] + w < dist[ copil ] )
- {
- dist[ copil ] = dist[ vecin ] + w;
- pq.push( ii( dist[ copil ], copil ) );
- par[ copil ] = vecin;
- }
- }
- }
- return false;
- }
- void initializeaza()
- {
- vizitat.reset();
- for( int i = 0; i <= n; ++i )
- dist[ i ] = par[ i ] = 0;
- ListaAdiacenta.clear();
- }
- int main()
- {
- vector<int> rez;
- ifstream f( "date.in" );
- ofstream g( "date.out" );
- ios::sync_with_stdio( false );
- cin.tie( 0 );
- int m,c;
- cin >> c;
- while( c-- > 0)
- {
- cin >> n >> m;
- initializeaza();
- ListaAdiacenta.resize( n + 1 );
- for(int i=0 ; i<=n ; i++)
- ListaAdiacenta[i].push_back(ii(0,0));
- int u, v, w; /// Avem muchia (u, v) de cost w
- while( m-- )
- {
- cin >> u >> v >> w;
- ListaAdiacenta[ u ].push_back( ii( v, w ) );
- //ListaAdiacenta[ v ].push_back( ii( u, w ) );
- }
- int st, fin;
- cin >> st >> fin;
- int start = st, stop = fin;
- if( Dijkstra( start, stop ) == true )
- {
- vector<int> drum;
- rez.push_back( dist[ stop ] );
- }
- else
- rez.push_back( -1 );
- }
- for( int i = 0; i < n; ++i )
- if( rez[ i ] != -1 )
- cout << rez[ i ] << '\n';
- else
- cout << "NO" << '\n';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement