Advertisement
Guest User

Untitled

a guest
Dec 9th, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.20 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define x first
  6. #define y second
  7. #define z third
  8. #define pb push_back
  9. #define ins insert
  10. #define len(x) (int) x.size()
  11. #define all(a) a.begin(), a.end()
  12.  
  13. #define fast_io ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  14. #define tests() int T; cin >> T; for (int TTT = 0; TTT < T; ++TTT)
  15. #define read(a) for (int i = 0; i < a.size(); ++i) cin >> a[i];
  16. #define print(x, text) cout << text << " = " << x << endl;
  17. #define printv(x, text) cout << text << " = "; for (auto e : x) cout << e << ' '; cout << endl;
  18. #define printvp(x, text) cout << text << " =\n"; for (auto e : x) cout << e.first << ' ' << e.second << endl; cout << endl;
  19.  
  20. typedef long long ll;
  21. typedef vector <int> vi;
  22. typedef vector <ll> vll;
  23. typedef pair <int, int> pii;
  24.  
  25. int n, m;
  26. vector < vector <pii> > a;
  27.  
  28. void bfs(int st, int fin) {
  29.     vector <int> dist(n, -1);
  30.     vector <bool> used(n, 0);
  31.     dist[st] = 0;
  32.     used[st] = 1;
  33.  
  34.     queue <int> q[3];
  35.     //q[0].clear(); q[1].clear(); q[2].clear();
  36.     q[0].push(st);
  37.  
  38.     int num = 0;
  39.     while (!q[num].empty()) {
  40.         int v = q[num].front();
  41.         q[num].pop();
  42.         used[v] = 0;
  43.  
  44.         for (auto e : a[v]) {
  45.             int u = e.x, w = e.y;
  46.             if (dist[u] == -1 || dist[u] > dist[v] + w) {
  47.                 dist[u] = dist[v] + w;
  48.                 int next = dist[u] / 1000 % 3;
  49.                 if (!used[u]) {
  50.                     q[next].push(u);
  51.                     used[u] = 1;
  52.                 }
  53.             }
  54.         }
  55.  
  56.         for (int i = 0; q[num].empty() && i < 3; ++i)
  57.             num = (num + 1) % 3;
  58.     }
  59.  
  60.     cout << dist[fin] << "\n";
  61. }
  62.  
  63. int main() {
  64.     fast_io;
  65.  
  66.     cin >> n >> m;
  67.  
  68.     a.resize(n);
  69.     //map <pii, int> mw;
  70.     for (int i = 0; i < m; ++i) {
  71.         int v, u, w;
  72.         cin >> v >> u >> w;
  73.         v--, u--;
  74.         if (v == u) continue;
  75.         //if (mw.count({v, u}) == 0) mw[{v, u}] = 1e9;
  76.         //mw[{v, u}] = min(mw[{v, u}], w);
  77.     //}
  78.     //for (auto e : mw) {
  79.         //int v = e.x.x, u = e.x.y, w = e.y;
  80.         a[v].pb({u, w});
  81.     }
  82.  
  83.     tests() {
  84.         int v, u;
  85.         cin >> v >> u;
  86.         bfs(v - 1, u - 1);
  87.     }
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement