# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
699732 | finn__ | Ball Machine (BOI13_ballmachine) | C++17 | 159 ms | 52644 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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);
auto compare_postorder = [&](unsigned a, unsigned b)
{ return postorder[a] > postorder[b]; };
priority_queue<unsigned, vector<unsigned>, decltype(compare_postorder)>
qu(compare_postorder);
for (unsigned i = 0; i < n; i++)
qu.push(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() + 1);
has_ball[qu.top()] = 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.push(x);
printf("%u\n", h);
}
}
}
컴파일 시 표준 에러 (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... |