Submission #231529

#TimeUsernameProblemLanguageResultExecution timeMemory
231529borderBall Machine (BOI13_ballmachine)C++14
16.11 / 100
211 ms28408 KiB
#include <bits/stdc++.h> // #include <ext/pb_ds/assoc_container.hpp> // Common file // #include <ext/pb_ds/tree_policy.hpp> // Including tree_order_statistics_node_update using namespace std; // using namespace __gnu_pbds; #define debug(s) cerr << #s << " = " << s << '\n' #define all(v) (v).begin(), (v).end() #define mem(a,val) memset(a, val, sizeof a) #define ff first #define ss second typedef long long ll; // typedef tree<pair<int, int>,null_type,less<pair<int, int>>,rb_tree_tag,tree_order_statistics_node_update> ordered_set; const int N = 100010; int n, q, ptr, root; int T[N], P[N][20], L[N], col[N], val[N], sub[N]; vector<int> adj[N]; set<pair<int, int>> s; bool cmp(int A, int B) { return sub[A] < sub[B]; } void dfs0(int from, int u) { sub[u] = u; for (auto v: adj[u]) { if (v == from) continue; dfs0(v, u); sub[u] = min(sub[u], sub[v]); } sort(all(adj[u]), cmp); } void dfs(int from, int u, int dep) { T[u] = from; L[u] = dep; for (auto v: adj[u]){ if (v == from) continue; dfs(u, v, dep + 1); } val[u] = ptr; s.insert({ptr++, u}); } void init() { int i, j; for (i = 1; i <= n; i++) for (j = 0; 1 << j < n; j++) P[i][j] = -1; for (i = 1; i <= n; i++) P[i][0] = T[i]; for (j = 1; 1 << j < n; j++) for (i = 1; i <= n; i++) if (P[i][j - 1] != -1) P[i][j] = P[P[i][j - 1]][j - 1]; } int main() { scanf("%d %d", &n, &q); for (int i = 1; i <= n; ++i) { int x; scanf("%d", &x); if (x == 0) root = i; adj[x].push_back(i); } for (int i = 1; i <= n; ++i) sort(all(adj[i])); dfs(-1, root, 0); init(); while (q--) { int ty, v; scanf("%d %d", &ty, &v); if (ty == 1) { int ret; while (v--) { int node = (*s.begin()).ss; col[node] = 1; ret = node; s.erase({val[node], node}); } printf("%d\n", ret); } else { int ret = 0; for (int i = 16; i >= 0; --i) { if (col[P[v][i]]) { ret += (1 << i); v = P[v][i]; } } col[v] = 0; s.insert({val[v], v}); printf("%d\n", ret); } } }

Compilation message (stderr)

ballmachine.cpp: In function 'int main()':
ballmachine.cpp:65:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d", &n, &q);
   ~~~~~^~~~~~~~~~~~~~~~~
ballmachine.cpp:68:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &x);
     ~~~~~^~~~~~~~~~
ballmachine.cpp:77:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d", &ty, &v);
     ~~~~~^~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...