Submission #765736

#TimeUsernameProblemLanguageResultExecution timeMemory
765736ono_de206Highway Tolls (IOI18_highway)C++14
12 / 100
106 ms8508 KiB
#include "highway.h" #include<bits/stdc++.h> using namespace std; #define in insert #define all(x) x.begin(),x.end() #define pb push_back #define eb emplace_back #define ff first #define ss second // #define int long long typedef long long ll; typedef vector<int> vi; typedef set<int> si; typedef multiset<int> msi; typedef pair<int, int> pii; typedef vector<pii> vpii; const int mxn = 1e5 + 10; int id[mxn]; vector<int> l; vector<pair<int, int>> g[mxn]; void dfs(int to, int fr, int now, int dis) { if(now == dis) { l.pb(to); return; } for(auto it : g[to]) { if(it.ff == fr) continue; id[it.ff] = it.ss; dfs(it.ff, to, now + 1, dis); } } void find_pair(int n, vector<int> U, vector<int> V, int A, int B) { int m = U.size(); for(int i = 0; i < m; i++) { g[U[i]].eb(V[i], i); g[V[i]].eb(U[i], i); } vector<int> q(m, 1); long long tot = ask(q); int dis = tot / B; dfs(0, -1, 0, dis); int L = 0, R = (int)l.size() - 1; while(L < R) { int M = (L + R) / 2; for(int i = L; i <= M; i++) { q[id[l[i]]] = 0; } long long tmp = ask(q); for(int i = L; i <= M; i++) { q[id[l[i]]] = 1; } if(tmp == tot) L = M + 1; else R = M; } answer(0, l[R]); }
#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...