Submission #1217459

#TimeUsernameProblemLanguageResultExecution timeMemory
1217459perekopskadHighway Tolls (IOI18_highway)C++20
12 / 100
74 ms18576 KiB
#include "highway.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; #define el '\n' #define pb push_back #define pii pair <ll, ll> #define ff first #define ss second #define mkp make_pair #define fr(i, l, r) for(ll (i) = l; (i) <= r; (i)++) #define frb(i, r, l) for(ll (i) = r; (i) >= l; (i)--) template<class T, class S> inline bool chmax(T &a, const S &b) { return (a < b ? a = b, 1 : 0); } template<class T, class S> inline bool chmin(T &a, const S &b) { return (a > b ? a = b, 1 : 0); } ll const N = 1e5 + 10; ll const LOG = 22; ll const inf = 1e9 + 10; ll const INF = 1e18 + 10; ll const mod = 1e9 + 7; ll const mod2 = 998244353; ll const K = 400; ll m; vector <pii> g[N]; vector <int> w; ll par[N], idup[N], tin[N], pos[N], used[N]; ll timer = 0, start; void dfs(ll v, ll p) { tin[v] = ++timer; pos[tin[v]] = v; par[v] = p; for(auto [u, id] : g[v]) { if(u != p) { idup[u] = id; dfs(u, v); } } } ll check(ll l, ll r) { fill(w.begin(), w.end(), 0); fill(used, used + N, 0); fr(x, l, r) { ll v = pos[x]; while(v && !used[v]) { used[v] = 1; w[idup[v]] = 1; v = par[v]; } } return ask(w); } void find_pair(int N, std::vector<int> U, std::vector<int> V, int A, int B) { m = U.size(); for(int i = 0; i < m; i++) { g[U[i]].pb({V[i], i}); g[V[i]].pb({U[i], i}); } w.resize(m); start = ask(w) / A; dfs(0, 0); ll bl = 1, br = N; while(bl < br) { ll mid = (bl + br) / 2; if(check(bl, mid) == start * B) br = mid; else bl = mid + 1; } answer(0, pos[bl]); }
#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...