Submission #764048

#TimeUsernameProblemLanguageResultExecution timeMemory
764048t6twotwo통행료 (IOI18_highway)C++17
18 / 100
210 ms262144 KiB
#include "highway.h" #include <bits/stdc++.h> using namespace std; using ll = long long; void find_pair(int N, vector<int> U, vector<int> V, int A, int B) { int M = U.size(); bool subtask3 = M == N - 1; for (int i = 0; i < M; i++) { if (U[i] != i && V[i] != i + 1) { subtask3 = 0; } } ll s = ask(vector<int>(M)); if (subtask3) { int lo = 0, hi = N - 1; while (lo < hi) { int mi = (lo + hi + 1) / 2; vector<int> w(M); fill(w.begin(), w.begin() + mi, 1); if (ask(w) != s) { hi = mi - 1; } else { lo = mi; } } answer(lo, lo + s / A); return; } vector<vector<pair<int, int>>> adj(N); for (int i = 0; i < M; i++) { adj[U[i]].emplace_back(V[i], i); adj[V[i]].emplace_back(U[i], i); } vector<int> dep(N), t(N); auto dfs = [&](auto dfs, int x, int p) -> void { for (auto [y, z] : adj[x]) { if (y == p) { continue; } t[y] = z; dep[y] = dep[x] + 1; dfs(dfs, y, x); } }; dfs(dfs, 0, -1); // vector<vector<int>> v(N); // for (int i = 0; i < N; i++) { // v[dep[i]].push_back(i); // } // int lo = 1, hi = N - 1; // while (lo < hi) { // int mi = (lo + hi) / 2; // vector<int> w(M, 1); // for (int i = 1; i <= mi; i++) { // for (int x : v[i]) { // w[t[x]] = 0; // } // } // if (ask(w) == s) { // hi = mi; // } else { // lo = mi + 1; // } // } // int d = lo; lo = 0, hi = v[d].size() - 1; // while (lo < hi) { // int mi = (lo + hi) / 2; // vector<int> w(M); // for (int i = 0; i <= mi; i++) { // w[t[v[d][i]]] = 1; // } // if (ask(w) != s) { // hi = mi; // } else { // lo = mi + 1; // } // } // int S = v[d][lo]; // dfs(dfs, S, -1); vector<int> q; for (int i = 0; i < N; i++) { if (dep[i] == s / A) { q.push_back(i); } } int lo = 0, hi = q.size() - 1; while (lo < hi) { int mi = (lo + hi) / 2; vector<int> w(M); for (int i = 0; i <= mi; i++) { w[t[q[i]]] = 1; } if (ask(w) != s) { hi = mi; } else { lo = mi + 1; } } // answer(S, q[lo]); answer(0, q[lo]); }
#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...