Submission #1071900

#TimeUsernameProblemLanguageResultExecution timeMemory
1071900Joshua_AnderssonHighway Tolls (IOI18_highway)C++14
6 / 100
199 ms262144 KiB
#include "highway.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; const ll linf = ll(1e18); typedef vector<int> vi; typedef vector<vi> vvi; typedef pair<int, int> p2; #define rep(i, high) for (int i = 0; i < high; i++) #define repp(i, low, high) for (int i = low; i < high; i++) #define repe(i, container) for (auto& i : container) #define sz(container) ((int)container.size()) #define all(x) begin(x),end(x) #if _LOCAL #define assert(x) if (!(x)) __debugbreak() #endif typedef long long ll; void dfs(int u, int p, int d, vector<vector<p2>>&edges, vi& edgedist, vi& nodedist) { nodedist[u] = d; repe(e, edges[u]) { if (e.first == p) continue; edgedist[e.second] = d; dfs(e.first, u, d + 1, edges, edgedist, nodedist); } } void find_pair(int n, std::vector<int> U, std::vector<int> V, int A, int B) { int m = sz(U); ll baseline = ask(vi(m, 0)); int lo = -1; int hi = m; while (lo+1<hi) { int mid = (lo + hi) / 2; vi w(m); rep(i, mid + 1) w[i] = 1; if (ask(w) > baseline) { hi = mid; } else lo = mid; } int u = U[hi]; int v = V[hi]; vector<vector<p2>> edges(n); rep(i, m) { int a = U[i]; int b = V[i]; edges[a].emplace_back(b, i); edges[b].emplace_back(a, i); } vi ans; rep(_, 2) { vi edgedist(m); vi nodedist(n); dfs(u, v, 10, edges, edgedist, nodedist); if (_==0) edgedist[hi] = int(1e6); vector<p2> edge_order; rep(i, m) edge_order.emplace_back(edgedist[i], i); sort(edge_order.rbegin(), edge_order.rend()); lo = -1; hi = m; while (lo+1<hi) { int mid = (lo + hi) / 2; vi w(m); rep(i, mid + 1) w[edge_order[i].second] = 1; if (ask(w) > baseline) { hi = mid; } else lo = mid; } int e = edge_order[hi].second; ans.push_back(nodedist[U[e]]>nodedist[V[e]]?U[e]:V[e]); swap(u, v); } answer(ans[0], ans[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...