Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.30 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define ll long long
  3. #define pb push_back
  4. using namespace std;
  5.  
  6. typedef pair<int, int> pii;
  7. typedef vector<int> vi;
  8.  
  9. const int N = 205;
  10.  
  11. int adj[N][N];
  12. int risk[N];
  13. int n;
  14.  
  15. int dijkstra(int u, int v, int thresh){
  16.     priority_queue<pii, vector<pii>, greater<pii>> pq;
  17.     vi dis(N, 1e9);
  18.     pq.emplace(u, 0);
  19.  
  20.     while(!pq.empty()){
  21.         u = pq.top().first;
  22.         int d = pq.top().second; pq.pop();
  23.  
  24.         if(risk[u] > thresh || d > dis[u]) continue;
  25.  
  26.         dis[u] = d;
  27.  
  28.         for(int i = 1; i <= n; i++){
  29.             if(adj[u][i] && risk[i] <= thresh && dis[i] > dis[u] + adj[u][i]){
  30.                 pq.emplace(i, dis[u] + adj[u][i]);
  31.             }
  32.         }
  33.     }
  34.     return dis[v];
  35. }
  36.  
  37. int main(){
  38.     ios_base::sync_with_stdio(0);
  39.     cin.tie(NULL);
  40.  
  41.     int t;
  42.     cin >> t;
  43.  
  44.     for(int idx = 1; idx <= t; idx++){
  45.         int q;
  46.         cin >> n >> q;
  47.  
  48.         for(int i = 1; i <= n; i++){
  49.             cin >> risk[i];
  50.         }
  51.  
  52.         for(int i = 1; i <= n; i++){
  53.             for(int j = 1; j <= n; j++){
  54.                 cin >> adj[i][j];
  55.             }
  56.         }
  57.  
  58.         int x, y, w;
  59.         for(int i = 0; i < q; i++){
  60.             cin >> x >> y >> w;
  61.             cout << dijkstra(x, y, w) << "\n";
  62.         }
  63.     }
  64.  
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement