제출 #1274363

#제출 시각아이디문제언어결과실행 시간메모리
1274363nicolo_010통행료 (IOI18_highway)C++20
12 / 100
76 ms9272 KiB
#include <bits/stdc++.h> #include "highway.h" using namespace std; using ll = long long; using pii = pair<int, int>; vector<vector<pii>> adj; vector<int> endp; vector<int> edge; int t; int last; void dfs(int n, int p=-1) { for (auto x : adj[n]) { if (x.second == p) continue; endp[t] = x.second; edge[x.first] = t++; dfs(x.second, n); } } void find_pair(int n, vector<int> U, vector<int> V, int A, int B) { int m = U.size(); vector<int> query(m, 0); ll w = ask(query); adj.resize(n); for (int i=0; i<m; i++) { int a = U[i]; int b = V[i]; adj[a].push_back({i, b}); adj[b].push_back({i, a}); } edge.resize(n); endp.resize(n); t=0; dfs(0); int l = 0, r = t-1; int ans=-1; while (l <= r) { int mm = (l+r)/2; for (int i=0; i<m; i++) { query[i] = (edge[i] >= mm); } ll w2 = ask(query); if (w2 != w) { l = mm+1; ans = mm; } else { r = mm-1; } } answer(0, endp[ans]); }
#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...