Submission #713829

#TimeUsernameProblemLanguageResultExecution timeMemory
713829PixelCatHighway Tolls (IOI18_highway)C++14
5 / 100
17 ms5072 KiB
#ifdef NYAOWO #include "grader.cpp" #endif #include "highway.h" #include <bits/stdc++.h> #define For(i, a, b) for(int i = a; i <= b; i++) #define F first #define S second #define all(x) x.begin(), x.end() #define sz(x) ((int)x.size()) #define eb emplace_back using namespace std; using LL = long long; using pii = pair<int, int>; const int MAXN = 90010; vector<int> adj[MAXN]; int d[MAXN]; int eid[MAXN]; void dfs(int n, int p, int dep) { d[n] = dep; for(auto &i:adj[n]) if(i != p) { dfs(i, n, dep + 1); } } int query(const vector<int> &v, int M) { vector<int> w(M, 0); for(auto &i:v) w[eid[i]] = 1; return ask(w); } int solve(int N, int M, vector<int> &cand, int dist) { int m = sz(cand); if(m == 1) return cand[0]; int mi = m / 2; vector<int> v1(cand.begin(), cand.begin() + mi); vector<int> v2(cand.begin() + mi, cand.end()); if(query(v1, M) > dist) return solve(N, M, v1, dist); return solve(N, M, v2, dist); } void find_pair(int N, std::vector<int> U, std::vector<int> V, int A, int B) { cerr << A << " " << B << "\n"; int M = U.size(); assert(M == N - 1); int dist = ask(vector<int>(M, 0)); assert(dist % A == 0); For(i, 0, M - 1) { adj[U[i]].eb(V[i]); adj[V[i]].eb(U[i]); } dfs(0, 0, 0); For(i, 0, M - 1) { if(d[U[i]] < d[V[i]]) eid[V[i]] = i; else eid[U[i]] = i; } For(i, 1, N - 1) { if(d[i] == dist / A) { if(query(vector<int>(1, i), M) > dist) { answer(0, i); return; } } } For(i, 0, 1000) query(vector<int>(1, 2), M); return; vector<int> cand; For(i, 0, N - 1) if(d[i] == dist / A) cand.eb(i); answer(0, solve(N, M, cand, dist)); // for (int j = 0; j < 50; ++j) { // std::vector<int> w(M); // for (int i = 0; i < M; ++i) { // w[i] = 0; // } // long long toll = ask(w); // } // answer(0, N - 1); }
#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...