Raslboyy

Сталкер

Apr 8th, 2020
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.64 KB | None | 0 0
  1. #include <iostream>
  2. #include <bits/stdc++.h>
  3. //#pragma GCC optimize("O3")
  4. //#pragma GCC optimize("unroll-loops")
  5.  
  6. #define mp make_pair
  7. #define pb push_back
  8. #define eb emplace_back
  9. #define ef emplace_back
  10. #define x first
  11. #define y second
  12. #define sz(x) (int)x.size()
  13. #define all(x) begin(x), end(x)
  14. #define rall(x) rbegin(x), rend(x)
  15. #define FOR(i,a,b) for (int i = (a); i < (b); i++)
  16. #define RFOR(i,b,a) for (int i = (b) - 1; i >= (a); i--)
  17.  
  18. using namespace std;
  19.  
  20. typedef unsigned long long ull;
  21. typedef long long ll;
  22. typedef long double ld;
  23. typedef pair<int, int> pi;
  24. typedef pair<ld, ld> pld;
  25. typedef pair<ll, ll> pl;
  26. typedef vector<int> veci;
  27. typedef vector<bool> vecb;
  28. typedef vector<vector<int>> vvi;
  29. typedef vector<vector<bool>> vvb;
  30.  
  31. const int INF_I = 1e9;
  32. const ll INF_LL = 1e18;
  33. const int MOD = 1000000007;
  34. const double eps = 1e-6;
  35. //(clock() * 1.0 / CLOCKS_PER_SEC)
  36. void solve(){
  37.  
  38. }
  39.  
  40. int main() {
  41.  
  42.     ios::sync_with_stdio(false);
  43.     cin.tie(nullptr);
  44.     cout.tie(nullptr);
  45.  
  46.     int n, k;
  47.     cin >> n >> k;
  48.     vector<vector<vector<short>>> g(k+1, vector<vector<short>>(n + 1));
  49.     vector<set<short>> c(n + 1);
  50.     for (int i = 1; i <= k; i++){
  51.         int m;
  52.         cin >> m;
  53.         while (m--){
  54.             int a, b;
  55.             cin >> a >> b;
  56.             a--, b--;
  57.             c[a].emplace(i);
  58.             c[b].emplace(i);
  59.             g[i][a].eb(b);
  60.             g[i][b].eb(a);
  61.         }
  62.     }
  63.  
  64.     vvb u(k+1, vecb(n+1));
  65.     list<pair<short, short>> deq;
  66.     vector<vector<short>> d(k+1, vector<short>(n+1, 1 << 13));
  67.     d[0][0] = 0;
  68.     deq.eb(mp(0, 0));
  69.     while (!deq.empty()){
  70.         pi cur = deq.front();
  71.         deq.pop_front();
  72.         if (u[cur.x][cur.y])
  73.             continue;
  74.         u[cur.x][cur.y] = true;
  75.         if (cur.y == n-1 && cur.x != 0){
  76.             cout << d[cur.x][cur.y] << "\n";
  77.             return 0;
  78.         }
  79.         if (cur.x == 0){
  80.             for (int i : c[cur.y]) {
  81.                 if (!u[i][cur.y]) {
  82.                     if (d[i][cur.y] > d[cur.x][cur.y] + 1)
  83.                         d[i][cur.y] = d[cur.x][cur.y] + 1;
  84.                     deq.eb(mp(i, cur.y));
  85.                 }
  86.             }
  87.         }
  88.         else{
  89.             if (!u[0][cur.y]) {
  90.                 d[0][cur.y] = min(d[0][cur.y], d[cur.x][cur.y]);
  91.                 deq.ef(mp(0, cur.y));
  92.             }
  93.             for (int i : g[cur.x][cur.y]){
  94.                 if (u[cur.x][i])
  95.                     continue;
  96.                 d[cur.x][i] = min(d[cur.x][i], d[cur.x][cur.y]);
  97.                 deq.ef(mp(cur.x, i));
  98.             }
  99.         }
  100.     }
  101.     cout << "-1" << endl;
  102.  
  103.     return 0;
  104. }
Add Comment
Please, Sign In to add comment