#include "highway.h"
#include <bits/stdc++.h>
using i64 = long long;
void find_pair(int N, std::vector<int> U, std::vector<int> V, int A, int B) {
const int M = (int)U.size();
std::vector<std::vector<std::pair<int, int>>> graph(N);
for (int i = 0; i < M; ++i) {
graph[U[i]].push_back({V[i], i});
graph[V[i]].push_back({U[i], i});
}
// find one of the vertices on the min cost path
const int distLen = ask(std::vector<int>(M, 0)) / (i64)A;
auto binarySearch = [&](int ng, int ok, auto &&f) {
while (std::abs(ok - ng) > 1) {
const auto mid = (ok + ng) / 2;
if (f(mid)) ok = mid;
else ng = mid;
}
return ok;
};
int root = binarySearch(0, N, [&](const int m) {
std::vector<int> w(M);
for (int i = 0; i < M; ++i) {
const int mx = std::max(U[i], V[i]);
w[i] = mx < m ? 0 : 1;
}
return ask(w) == (i64)(distLen) * A;
}) - 1;
// construct BFS-Tree
std::vector<std::vector<std::pair<int, int>>> bfsTree(N);
std::vector<int> parent(N, -1);
std::queue<int> que;
que.push(root);
std::vector<bool> isSeen(N);
isSeen[root] = true;
std::vector<bool> exTree(M);
while (not que.empty()) {
const int f = que.front();
que.pop();
for (const auto &[t, i] : graph[f]) {
if (isSeen[t]) continue;
isSeen[t] = true;
bfsTree[f].push_back({t, i});
exTree[i] = true;
parent[t] = f;
que.push(t);
}
}
// Euler-Tour
std::vector<int> in(N, -1), revIn(N);
auto dfs = [&](auto &&self, const int v, int &id) -> void {
revIn[id] = v;
in[v] = id;
++id;
for (const auto &[t, i] : bfsTree[v]) {
if (in[t] != -1) continue;
self(self, t, id);
}
};
int gomi = 0;
dfs(dfs, root, gomi);
// binary search, find path
// find r
int r = binarySearch(0, N, [&](const int m) {
std::vector<int> w(M, 1);
for (int i = 0; i < M; ++i) {
if (not exTree[i]) continue;
const int mx = std::max(in[U[i]], in[V[i]]);
w[i] = mx < m ? 0 : 1;
}
return ask(w) == (i64)(distLen) * A;
}) - 1;
int r2 = revIn[r];
while (parent[r2] != -1 and in[parent[r2]] != 0) {
r2 = parent[r2];
}
r2 = in[r2];
int l = binarySearch(0, r2, [&](const int m) {
std::vector<int> w(M, 1);
for (int i = 0; i < M; ++i) {
if (not exTree[i]) continue;
const int mx = std::max(in[U[i]], in[V[i]]);
if (mx >= r2) w[i] = 0;
else w[i] = mx < m ? 0 : 1;
}
return ask(w) == (i64)(distLen) * A;
}) - 1;
answer(revIn[l], revIn[r]);
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
208 KB |
Output is correct |
2 |
Correct |
1 ms |
208 KB |
Output is correct |
3 |
Correct |
1 ms |
304 KB |
Output is correct |
4 |
Correct |
1 ms |
208 KB |
Output is correct |
5 |
Correct |
1 ms |
208 KB |
Output is correct |
6 |
Correct |
1 ms |
208 KB |
Output is correct |
7 |
Correct |
1 ms |
208 KB |
Output is correct |
8 |
Correct |
1 ms |
208 KB |
Output is correct |
9 |
Correct |
1 ms |
208 KB |
Output is correct |
10 |
Correct |
1 ms |
308 KB |
Output is correct |
11 |
Correct |
1 ms |
208 KB |
Output is correct |
12 |
Correct |
1 ms |
208 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
336 KB |
Output is correct |
2 |
Correct |
21 ms |
1608 KB |
Output is correct |
3 |
Correct |
165 ms |
12508 KB |
Output is correct |
4 |
Correct |
129 ms |
12528 KB |
Output is correct |
5 |
Correct |
137 ms |
12572 KB |
Output is correct |
6 |
Correct |
133 ms |
12428 KB |
Output is correct |
7 |
Correct |
156 ms |
12488 KB |
Output is correct |
8 |
Correct |
140 ms |
12436 KB |
Output is correct |
9 |
Correct |
127 ms |
12428 KB |
Output is correct |
10 |
Correct |
172 ms |
12444 KB |
Output is correct |
11 |
Correct |
157 ms |
13676 KB |
Output is correct |
12 |
Correct |
176 ms |
13708 KB |
Output is correct |
13 |
Correct |
156 ms |
13576 KB |
Output is correct |
14 |
Correct |
183 ms |
13328 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
10 ms |
1828 KB |
Output is correct |
2 |
Correct |
30 ms |
3348 KB |
Output is correct |
3 |
Correct |
34 ms |
5072 KB |
Output is correct |
4 |
Correct |
132 ms |
14188 KB |
Output is correct |
5 |
Correct |
123 ms |
14188 KB |
Output is correct |
6 |
Correct |
87 ms |
14568 KB |
Output is correct |
7 |
Correct |
84 ms |
14800 KB |
Output is correct |
8 |
Correct |
92 ms |
14232 KB |
Output is correct |
9 |
Correct |
101 ms |
14492 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
336 KB |
Output is correct |
2 |
Correct |
13 ms |
1608 KB |
Output is correct |
3 |
Correct |
109 ms |
9824 KB |
Output is correct |
4 |
Correct |
152 ms |
12444 KB |
Output is correct |
5 |
Correct |
131 ms |
12468 KB |
Output is correct |
6 |
Correct |
115 ms |
12428 KB |
Output is correct |
7 |
Correct |
134 ms |
12432 KB |
Output is correct |
8 |
Correct |
156 ms |
12384 KB |
Output is correct |
9 |
Correct |
127 ms |
12432 KB |
Output is correct |
10 |
Correct |
163 ms |
12444 KB |
Output is correct |
11 |
Correct |
184 ms |
13412 KB |
Output is correct |
12 |
Correct |
153 ms |
13484 KB |
Output is correct |
13 |
Correct |
175 ms |
13508 KB |
Output is correct |
14 |
Correct |
162 ms |
13464 KB |
Output is correct |
15 |
Correct |
135 ms |
12444 KB |
Output is correct |
16 |
Correct |
133 ms |
12436 KB |
Output is correct |
17 |
Correct |
137 ms |
13404 KB |
Output is correct |
18 |
Correct |
163 ms |
13552 KB |
Output is correct |
19 |
Correct |
154 ms |
12436 KB |
Output is correct |
20 |
Correct |
134 ms |
13724 KB |
Output is correct |
21 |
Correct |
128 ms |
11988 KB |
Output is correct |
22 |
Correct |
106 ms |
11972 KB |
Output is correct |
23 |
Correct |
143 ms |
11812 KB |
Output is correct |
24 |
Correct |
121 ms |
12164 KB |
Output is correct |
25 |
Correct |
136 ms |
14048 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
20 ms |
1688 KB |
Output is correct |
2 |
Correct |
17 ms |
1724 KB |
Output is correct |
3 |
Correct |
189 ms |
12828 KB |
Output is correct |
4 |
Correct |
193 ms |
13192 KB |
Output is correct |
5 |
Correct |
257 ms |
13948 KB |
Output is correct |
6 |
Correct |
290 ms |
13936 KB |
Output is correct |
7 |
Correct |
267 ms |
13960 KB |
Output is correct |
8 |
Correct |
258 ms |
13952 KB |
Output is correct |
9 |
Correct |
158 ms |
8140 KB |
Output is correct |
10 |
Correct |
152 ms |
8128 KB |
Output is correct |
11 |
Correct |
235 ms |
9324 KB |
Output is correct |
12 |
Correct |
224 ms |
12168 KB |
Output is correct |
13 |
Correct |
272 ms |
12996 KB |
Output is correct |
14 |
Correct |
182 ms |
14036 KB |
Output is correct |
15 |
Correct |
261 ms |
14068 KB |
Output is correct |
16 |
Correct |
227 ms |
9444 KB |
Output is correct |
17 |
Correct |
147 ms |
12180 KB |
Output is correct |
18 |
Correct |
165 ms |
12516 KB |
Output is correct |
19 |
Correct |
135 ms |
12368 KB |
Output is correct |
20 |
Correct |
129 ms |
12464 KB |
Output is correct |
21 |
Correct |
216 ms |
14180 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
14 ms |
1660 KB |
Output is correct |
2 |
Correct |
18 ms |
1684 KB |
Output is correct |
3 |
Partially correct |
163 ms |
12856 KB |
Output is partially correct |
4 |
Correct |
188 ms |
13004 KB |
Output is correct |
5 |
Correct |
210 ms |
13192 KB |
Output is correct |
6 |
Correct |
219 ms |
13944 KB |
Output is correct |
7 |
Correct |
191 ms |
12888 KB |
Output is correct |
8 |
Correct |
154 ms |
13040 KB |
Output is correct |
9 |
Correct |
260 ms |
13196 KB |
Output is correct |
10 |
Partially correct |
278 ms |
13928 KB |
Output is partially correct |
11 |
Correct |
203 ms |
13952 KB |
Output is correct |
12 |
Partially correct |
245 ms |
13948 KB |
Output is partially correct |
13 |
Correct |
134 ms |
9424 KB |
Output is correct |
14 |
Correct |
173 ms |
8132 KB |
Output is correct |
15 |
Correct |
165 ms |
9332 KB |
Output is correct |
16 |
Correct |
150 ms |
8204 KB |
Output is correct |
17 |
Correct |
135 ms |
9332 KB |
Output is correct |
18 |
Correct |
195 ms |
8208 KB |
Output is correct |
19 |
Correct |
205 ms |
12168 KB |
Output is correct |
20 |
Correct |
236 ms |
13092 KB |
Output is correct |
21 |
Correct |
260 ms |
14052 KB |
Output is correct |
22 |
Partially correct |
217 ms |
13992 KB |
Output is partially correct |
23 |
Correct |
238 ms |
14052 KB |
Output is correct |
24 |
Partially correct |
251 ms |
14032 KB |
Output is partially correct |
25 |
Correct |
227 ms |
14248 KB |
Output is correct |
26 |
Correct |
265 ms |
14072 KB |
Output is correct |
27 |
Correct |
135 ms |
12452 KB |
Output is correct |
28 |
Correct |
117 ms |
12200 KB |
Output is correct |
29 |
Correct |
125 ms |
12576 KB |
Output is correct |
30 |
Partially correct |
111 ms |
12452 KB |
Output is partially correct |
31 |
Partially correct |
117 ms |
12364 KB |
Output is partially correct |
32 |
Correct |
121 ms |
12156 KB |
Output is correct |
33 |
Correct |
135 ms |
12716 KB |
Output is correct |
34 |
Correct |
155 ms |
12364 KB |
Output is correct |
35 |
Partially correct |
143 ms |
12284 KB |
Output is partially correct |
36 |
Correct |
139 ms |
12144 KB |
Output is correct |
37 |
Partially correct |
121 ms |
12420 KB |
Output is partially correct |
38 |
Correct |
166 ms |
12376 KB |
Output is correct |
39 |
Correct |
196 ms |
14300 KB |
Output is correct |
40 |
Partially correct |
261 ms |
14416 KB |
Output is partially correct |
41 |
Correct |
243 ms |
14172 KB |
Output is correct |
42 |
Correct |
240 ms |
14192 KB |
Output is correct |