# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
699734 | finn__ | Ball Machine (BOI13_ballmachine) | C++17 | 133 ms | 53356 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define N 100000
vector<unsigned> g[N], anc[N];
unsigned min_child[N], postorder[N];
bitset<N> has_ball;
unsigned calc_min_child(unsigned u)
{
min_child[u] = u;
for (unsigned const &v : g[u])
min_child[u] = min(min_child[u], calc_min_child(v));
return min_child[u];
}
unsigned traverse(unsigned u, vector<unsigned> &path, unsigned i = 0)
{
for (size_t j = 1; j <= path.size(); j <<= 1)
anc[u].push_back(path[path.size() - j]);
path.push_back(u);
for (unsigned const &v : g[u])
i = traverse(v, path, i);
path.pop_back();
postorder[u] = i++;
return i;
}
int main()
{
size_t n, q;
scanf("%zu %zu", &n, &q);
unsigned r;
for (size_t i = 0; i < n; i++)
{
unsigned p;
scanf("%u", &p);
if (!p)
r = i;
else
g[p - 1].push_back(i);
}
calc_min_child(r);
for (size_t i = 0; i < n; i++)
sort(g[i].begin(), g[i].end(), [&](unsigned a, unsigned b)
{ return min_child[a] < min_child[b]; });
vector<unsigned> path;
assert(traverse(r, path) == n);
priority_queue<pair<unsigned, unsigned>> qu;
for (unsigned i = 0; i < n; i++)
qu.emplace(n - postorder[i], i);
while (q--)
{
unsigned t, x;
scanf("%u %u", &t, &x);
if (t == 1)
{
for (size_t i = 0; i < x; i++)
{
if (i + 1 == x)
printf("%u\n", qu.top().second + 1);
has_ball[qu.top().second] = 1;
qu.pop();
}
}
else
{
x--;
assert(has_ball[x]);
unsigned h = 0;
for (size_t i = anc[x].size() - 1; i < anc[x].size(); i--)
if (has_ball[anc[x][i]])
x = anc[x][i], h += 1U << i;
has_ball[x] = 0;
qu.emplace(n - postorder[x], x);
printf("%u\n", h);
}
}
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |