# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
725941 |
2023-04-18T09:12:22 Z |
tengiz05 |
Prize (CEOI22_prize) |
C++17 |
|
2947 ms |
372072 KB |
#include <bits/stdc++.h>
using i64 = long long;
constexpr int N = 1E6 + 5;
int n;
struct Tree {
std::vector<int> adj[N];
int up[N][20];
int in[N], out[N];
int timeStamp = 0;
void dfs(int u, int p) {
in[u] = timeStamp++;
up[u][0] = p;
for (int i = 1; i < 20; i++) {
up[u][i] = up[up[u][i - 1]][i - 1];
}
for (int v : adj[u]) {
dfs(v, u);
}
out[u] = timeStamp;
}
bool is(int u, int v) {
return in[u] <= in[v] && in[v] < out[u];
}
int lca(int u, int v) {
if (is(u, v)) return u;
if (is(v, u)) return v;
for (int i = 19; i >= 0; i--) {
if (!is(up[u][i], v)) {
u = up[u][i];
}
}
return up[u][0];
}
std::vector<std::pair<int, int>> e[N];
int sum[N];
bool vis[N];
void fill(int u) {
vis[u] = true;
for (auto [v, w] : e[u]) {
if (vis[v]) continue;
if (in[v] > in[u]) {
sum[v] = sum[u] + w;
} else {
sum[v] = sum[u] - w;
}
fill(v);
}
}
} t1, t2;
/*
9 3 2 3
2 -1 2 1 1 5 1 4 5
9 4 5 5 7 3 -1 3 7
0 6 13 0
3 0 0 5
2 7
7 1
1 2
*/
int main() {
//~ std::ios::sync_with_stdio(false);
//~ std::cin.tie(nullptr);
int n, k, q, T;
std::cin >> n >> k >> q >> T;
int r1 = -1, r2 = -1;
for (int i = 0; i < n; i++) {
int p;
std::cin >> p;
if (p == -1) r1 = i;
else {
p--;
t1.adj[p].push_back(i);
}
}
for (int i = 0; i < n; i++) {
int p;
std::cin >> p;
if (p == -1) r2 = i;
else {
p--;
t2.adj[p].push_back(i);
}
}
t1.dfs(r1, r1);
t2.dfs(r2, r2);
std::vector<int> f{r1, r2};
for (int i = 0; int(f.size()) < k; i++) {
if (i != r1 && i != r2) {
f.push_back(i);
}
}
for (int i = 0; i < k; i++) {
std::cout << f[i] + 1 << " \n"[i == k - 1];
}
std::cout.flush();
for (int i = 0; i < k - 1; i++) {
std::cout << "? " << f[i] + 1 << " " << f[i + 1] + 1 << "\n";
}
std::cout << "!" << std::endl;
for (int i = 0; i < k - 1; i++) {
int a = f[i];
int b = f[i + 1];
int l = t1.lca(a, b);
int c1, c2;
std::cin >> c1 >> c2;
t1.e[a].emplace_back(l, c1);
t1.e[l].emplace_back(a, c1);
t1.e[b].emplace_back(l, c2);
t1.e[l].emplace_back(b, c2);
l = t2.lca(a, b);
std::cin >> c1 >> c2;
t2.e[a].emplace_back(l, c1);
t2.e[l].emplace_back(a, c1);
t2.e[b].emplace_back(l, c2);
t2.e[l].emplace_back(b, c2);
}
t1.fill(r1);
t2.fill(r2);
std::vector<std::pair<int, int>> queries(T);
for (auto &[a, b] : queries) {
std::cin >> a >> b;
a--;
b--;
}
for (auto [a, b] : queries) {
int l = t1.lca(a, b);
std::cout << t1.sum[a] + t1.sum[b] - 2 * t1.sum[l] << " ";
l = t2.lca(a, b);
std::cout << t2.sum[a] + t2.sum[b] - 2 * t2.sum[l] << "\n";
}
std::cout.flush();
return 0;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Runtime error |
1269 ms |
227732 KB |
Execution killed with signal 13 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1823 ms |
238788 KB |
Output is correct |
2 |
Correct |
1633 ms |
234264 KB |
Output is correct |
3 |
Runtime error |
1258 ms |
207228 KB |
Execution killed with signal 13 |
4 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1293 ms |
227728 KB |
Output is correct |
2 |
Correct |
1228 ms |
227704 KB |
Output is correct |
3 |
Runtime error |
876 ms |
197264 KB |
Execution killed with signal 13 |
4 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2613 ms |
361368 KB |
Output is correct |
2 |
Correct |
2750 ms |
361456 KB |
Output is correct |
3 |
Runtime error |
1777 ms |
300552 KB |
Execution killed with signal 13 |
4 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2947 ms |
372072 KB |
Output is correct |
2 |
Correct |
2835 ms |
371404 KB |
Output is correct |
3 |
Runtime error |
1991 ms |
309688 KB |
Execution killed with signal 13 |
4 |
Halted |
0 ms |
0 KB |
- |