Advertisement
SorahISA

E. Ansy and the Password Game

Jun 22nd, 2025
304
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.32 KB | Source Code | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. using pii = pair<int, int>;
  5. template <typename T> using MinHeap = std::priority_queue<T, vector<T>, greater<T>>;
  6.  
  7. #define eb emplace_back
  8. #define ee emplace
  9.  
  10. template <typename T, typename U> bool chmin(T &lhs, U rhs) { return lhs > rhs ? lhs = rhs, 1 : 0; }
  11.  
  12. const int INF = INT_MAX >> 1;
  13.  
  14. int main() {
  15.     cin.tie(0)->sync_with_stdio(0);
  16.    
  17.     int N, M, Q; cin >> N >> M >> Q;
  18.    
  19.     vector<array<int, 3>> edges(M);
  20.     for (auto &[u, v, w] : edges) cin >> u >> v, w = -1;
  21.    
  22.     for (int W = (1<<2); W <= (1<<18); W <<= 2) {
  23.         cout << "? " << W << "\n" << flush;
  24.         string ret; cin >> ret;
  25.         for (int i = 0; i < M; ++i) {
  26.             if (edges[i][2] == -1 and ret[i] == '0') edges[i][2] = W / 2;
  27.         }
  28.     }
  29.     for (int i = 0; i < M; ++i) {
  30.         if (edges[i][2] == -1) edges[i][2] = (1 << 19);
  31.     }
  32.    
  33.     vector<vector<pii>> adj(N+1);
  34.     for (auto [u, v, w] : edges) adj[u].eb(v, w);
  35.    
  36.     vector<int> dis(N+1, INF);
  37.     MinHeap<pii> pq; pq.ee(dis[1] = 0, 1);
  38.     while (size(pq)) {
  39.         auto [d, now] = pq.top(); pq.pop();
  40.         if (d > dis[now]) continue;
  41.         for (auto [x, w] : adj[now]) { if (chmin(dis[x], d + w)) pq.ee(dis[x], x); }
  42.     }
  43.     cout << "! " << dis[N] << "\n" << flush;
  44.    
  45.     return 0;
  46. }
  47.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement