Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define FOR(i, a, b) for(int i = (a); i < (b); ++i)
- #define REP(i, n) FOR(i, 0, n)
- #define _ << " " <<
- typedef long long ll;
- typedef pair<int, int> point;
- const int MAXN = 100005;
- int test, n, m, a, b, c, poc, kraj;
- int dist[MAXN], bio[MAXN];
- priority_queue <point> Q;
- void dijkstra(){
- vector <point> edge[MAXN];
- memset(bio, 0, sizeof(bio));
- memset(dist, 0, sizeof(dist));
- int d, cvor;
- REP(i, m){
- cin >> a >> b >> c;
- edge[a].push_back(point(b, c));
- edge[b].push_back(point(a, c));
- }
- Q.push(point(0, poc));
- while(!Q.empty()){
- while(!Q.empty() && bio[Q.top().second]) Q.pop();
- if(Q.empty()) break;
- cvor = Q.top().second;
- d = -Q.top().first;
- Q.pop();
- bio[cvor] = 1;
- dist[cvor] = d;
- REP(i, edge[cvor].size()){
- int ncvor = edge[cvor][i].first;
- if(bio[ncvor]) continue;
- Q.push(point(-(d + edge[cvor][i].second), ncvor));
- }
- }
- if(poc == kraj)
- cout << 0;
- else{
- if(dist[kraj] == 0)
- cout << "NONE";
- else
- cout << dist[kraj];
- }
- cout << "\n";
- }
- int main(){
- ios_base::sync_with_stdio(false);
- cin >> test;
- REP(i, test){
- cin >> n >> m >> poc >> kraj;
- dijkstra();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement