Submission #858842

#TimeUsernameProblemLanguageResultExecution timeMemory
858842waldiHighway Tolls (IOI18_highway)C++17
51 / 100
115 ms14164 KiB
#include "highway.h" #include <bits/stdc++.h> #define FOR(i,p,k) for(int i=(p);i<=(k);++i) #define REP(i,n) FOR(i,0,(n)-1) #define fi first #define se second using namespace std; typedef long long ll; typedef pair<int, int> pii; void find_pair(int n, vector<int> u, vector<int> v, int a_int, int b_int){ int m = u.size(); ll a = a_int, b = b_int; vector<vector<pii>> g(n); REP(i, m){ g[u[i]].emplace_back(v[i], i); g[v[i]].emplace_back(u[i], i); } if(m == n-1){ vector<int> pyt(m, 0); ll samea = ask(pyt); int kr = 0; for(int lewo = 0, prawo = m-1; 1;){ if(lewo == prawo){kr = lewo; break;} int sr = (lewo+prawo)>>1; pyt = vector<int>(m, 0); FOR(i, lewo, sr) pyt[i] = 1; if(ask(pyt) > samea) prawo = sr; else lewo = sr+1; } int x = u[kr], y = v[kr]; pyt = vector<int>(m, 0); function<void(int, int)> dfs_oznacz = [&](int w, int o){ for(pii i : g[w]) if(i.fi != o) pyt[i.se] = 1, dfs_oznacz(i.fi, w); }; dfs_oznacz(x, y); int dlx = (ask(pyt)-samea)/(b-a); int dly = samea/a - dlx-1; vector<pii> vec; function<void(int, int, int, int)> dfs_gl = [&](int w, int o, int gl, int id){ if(!gl) return void(vec.emplace_back(id, w)); for(pii i : g[w]) if(i.fi != o) dfs_gl(i.fi, w, gl-1, i.se); }; dfs_gl(x, y, dlx, kr); int s = 0; for(int lewo = 0, prawo = vec.size()-1; 1;){ if(lewo == prawo){s = vec[lewo].se; break;} int sr = (lewo+prawo)>>1; pyt = vector<int>(m, 0); FOR(i, lewo, sr) pyt[vec[i].fi] = 1; if(ask(pyt) > samea) prawo = sr; else lewo = sr+1; } vec.clear(); dfs_gl(y, x, dly, kr); int t = 0; for(int lewo = 0, prawo = vec.size()-1; 1;){ if(lewo == prawo){t = vec[lewo].se; break;} int sr = (lewo+prawo)>>1; pyt = vector<int>(m, 0); FOR(i, lewo, sr) pyt[vec[i].fi] = 1; if(ask(pyt) > samea) prawo = sr; else lewo = sr+1; } 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...