Advertisement
Guest User

Untitled

a guest
Feb 20th, 2020
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.99 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define INF 1e9
  4. #define MAX_V 10000
  5.  
  6. using namespace std;
  7.  
  8. typedef pair<int,int> ii;
  9. typedef vector<ii> vii;
  10.  
  11. int n, m, q, s, u, v, w, dist[MAX_V];
  12. vector<vii> adj;
  13.  
  14. int main() {
  15.     while(scanf("%d%d%d%d",&n,&m,&q,&s),n + m + q + s) {
  16.         adj.assign(n,vii());
  17.         for(int i = 0; i < m; i++) {
  18.             scanf("%d%d%d",&u,&v,&w);
  19.             adj[u].push_back(ii(v,w));
  20.         }
  21.         fill(dist,dist + MAX_V,INF);
  22.         dist[s] = 0;
  23.         priority_queue<ii,vii,greater<ii>> pq;
  24.         pq.push(ii(dist[s],s));
  25.         while(!pq.empty()) {
  26.             ii cur = pq.top(); pq.pop();
  27.            
  28.             int cur_weight = cur.first;
  29.             int cur_node = cur.second;
  30.            
  31.             for(auto &x : adj[cur_node]) {
  32.                 if(dist[x.first] > cur_weight + x.second) {
  33.                     dist[x.first] = cur_weight + x.second;
  34.                     pq.push(ii(dist[x.first],x.first));
  35.                 }
  36.             }
  37.         }
  38.         for(int i = 0; i < q; i++) {
  39.             scanf("%d",&u);
  40.             if(dist[u] == INF) {
  41.                 printf("Impossible\n");
  42.             } else {
  43.                 printf("%d\n",dist[u]);
  44.             }
  45.         }
  46.         printf("\n");
  47.     }
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement