Submission #404281

#TimeUsernameProblemLanguageResultExecution timeMemory
404281SeDunionHighway Tolls (IOI18_highway)C++17
51 / 100
308 ms14148 KiB
#include "highway.h" #include<bits/stdc++.h> #ifndef LOCAL #define cerr if(false)cerr #endif using namespace std; using ll = long long; int M, N; ll Ask(vector<int>Q) { vector<int>W(M); for (int i : Q) W[i] = 1; ll res = ask(W); for (int i : W) cerr << i << " "; cerr << ": W " << res << endl;; return res; } ll Ask(vector<int>Q, vector<int>P) { for (int i : P) Q.emplace_back(i); return Ask(Q); } const int MAXN = 1e5; vector<int> order, was, d, U, V; vector<pair<int,int>>g[MAXN]; void bfs(int root) { d.assign(N, -1); queue<int>q; q.push(root); d[root] = 0; while (q.size()) { int v = q.front(); q.pop(); for (auto [to, id] : g[v]) if (d[to] == -1) { d[to] = d[v] + 1; q.push(to); if (U[id] != v) swap(U[id], V[id]); was[id] = 1; order.emplace_back(id); } } } int solve(int root) { was.assign(M, 0); assert((int)was.size() == M); order.clear(); bfs(root); vector<int>nu; for (int i = 0 ; i < M ; ++ i) { if (!was[i]) nu.emplace_back(i); } ll emp = Ask(nu); assert((int)order.size() == N-1); for (int i : order) cerr << i << " "; cerr << ": order\n"; for (int i : nu) cerr << i << " "; cerr << ": nu\n"; int l = 0, r = N - 2; while (l < r) { int m = (l + r + 1) / 2; vector<int>cur; for (int i = m ; i < N-1 ; ++ i) cur.emplace_back(order[i]); if (Ask(cur, nu) != emp) { l = m; } else { r = m - 1; } } l = order[l]; int S = d[U[l]] > d[V[l]] ? U[l] : V[l]; return S; } void find_pair(int N_, vector<int> U_, vector<int> V_, int A, int B) { M = U_.size(); N = N_; U = U_; V = V_; cerr << N << " " << M << " " << A << " " << B << " given\n"; for (int i = 0 ; i < M ; ++ i) { g[U[i]].emplace_back(V[i], i); g[V[i]].emplace_back(U[i], i); } int S = solve(0); int T = solve(S); cerr << S << " " << T << " mine\n"; answer(S, T); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...