Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define fr(i, a, b) for(int i = a, _ = b; i < _; i++)
- #define mp make_pair
- #define pb push_back
- typedef long long ll;
- typedef pair<int, int> pii;
- #define F first
- #define S second
- int djk(vector<pii> adj[], int begin, int dest, int n){
- int dist[n+1];
- fr(i, 0, n+1)
- dist[i] = INT_MAX;
- dist[begin] = 0;
- priority_queue<pii, vector<pii>, greater<pii> > pq;
- pq.push(mp(dist[begin], begin));
- while(!pq.empty()){
- int node = pq.top().S;
- pq.pop();
- for(pii v : adj[node])
- if(dist[node] + v.F < dist[v.S]){
- dist[v.S] = dist[node] + v.F;
- pq.push(mp(dist[v.S], v.S));
- }
- }
- return dist[dest];
- }
- int main(){
- int nn;
- scanf("%d" ,&nn);
- fr(lo, 0, nn){
- int n, m, begin, dest, v, w, c;
- scanf("%d%d%d%d" ,&n, &m, &begin, &dest);
- vector<pii> adj[n+1];
- fr(i, 0, m){
- scanf("%d%d%d" ,&v ,&w, &c);
- adj[v].pb(mp(c, w));
- adj[w].pb(mp(c, v));
- }
- int k = djk(adj, begin, dest, n);
- if(k == INT_MAX)
- cout << "NONE" << endl;
- else
- cout << k << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement