Submission #836253

#TimeUsernameProblemLanguageResultExecution timeMemory
836253mousebeaverHighway Tolls (IOI18_highway)C++14
12 / 100
114 ms11856 KiB
#define ll long long #define pll pair<ll, ll> #include "highway.h" #include <bits/stdc++.h> using namespace std; void dfs(vector<vector<pll>>& adjlist, vector<ll>& depth, vector<int>& upedge, int i) { for(pll p : adjlist[i]) { if(depth[p.first] == -1) { depth[p.first] = depth[i]+1; upedge[p.first] = p.second; dfs(adjlist, depth, upedge, p.first); } } } void find_pair(int n, std::vector<int> u, std::vector<int> v, int a, int b) { vector<vector<pll>> adjlist(n, vector<pll> (0)); for(ll i = 0; i < n-1; i++) { adjlist[u[i]].push_back({v[i], i}); adjlist[v[i]].push_back({u[i], i}); } vector<ll> depth(n, -1); depth[0] = 0; vector<int> upedge(n, -1); dfs(adjlist, depth, upedge, 0); vector<int> w(n-1, 0); ll dist = ask(w)/a; vector<ll> c(0); for(ll i = 0; i < n; i++) { if(depth[i] == dist) { c.push_back(i); } } while(c.size() > 1) { int mid = (c.size())/2; w.assign(n-1, 0); for(int i = mid; i < (int) c.size(); i++) { w[upedge[c[i]]] = 1; } if(ask(w) > dist*a) { vector<ll> s(0); for(int i = mid; i < (int) c.size(); i++) { s.push_back(c[i]); } c = s; } else { vector<ll> s(0); for(int i = 0; i < mid; i++) { s.push_back(c[i]); } c = s; } } answer(0, c[0]); }
#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...