Advertisement
Guest User

anfjsfla

a guest
Oct 23rd, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.07 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define fr(i, a, b) for(int i = a, _ = b; i < _; i++)
  4. #define mp make_pair
  5. #define pb push_back
  6. typedef long long ll;
  7. typedef pair<int, int> pii;
  8. #define F first
  9. #define S second
  10.  
  11. int djk(vector<pii> adj[], int begin, int dest, int n){
  12.     int dist[n+1];
  13.     fr(i, 0, n+1)
  14.         dist[i] = INT_MAX;
  15.  
  16.     dist[begin] = 0;
  17.     priority_queue<pii, vector<pii>, greater<pii> > pq;
  18.     pq.push(mp(dist[begin], begin));
  19.     while(!pq.empty()){
  20.         int node = pq.top().S;
  21.         pq.pop();
  22.         for(pii v : adj[node])
  23.             if(dist[node] + v.F < dist[v.S]){
  24.                 dist[v.S] = dist[node] + v.F;
  25.                 pq.push(mp(dist[v.S], v.S));
  26.             }
  27.     }
  28.  
  29.     return dist[dest];
  30. }
  31.  
  32. int main(){
  33.     int nn;
  34.     scanf("%d" ,&nn);
  35.     fr(lo, 0, nn){
  36.         int n, m, begin, dest, v, w, c;
  37.         scanf("%d%d%d%d" ,&n, &m, &begin, &dest);
  38.         vector<pii> adj[n+1];
  39.         fr(i, 0, m){
  40.             scanf("%d%d%d" ,&v ,&w, &c);
  41.             adj[v].pb(mp(c, w));
  42.             adj[w].pb(mp(c, v));
  43.         }
  44.  
  45.         int k = djk(adj, begin, dest, n);
  46.         if(k == INT_MAX)
  47.             cout << "NONE" << endl;
  48.         else
  49.             cout << k << endl;
  50.     }
  51.     return 0;
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement