Submission #850158

# Submission time Handle Problem Language Result Execution time Memory
850158 2023-09-15T22:13:33 Z NK_ Ball Machine (BOI13_ballmachine) C++17
12.381 / 100
127 ms 27344 KB
// Success consists of going from failure to failure without loss of enthusiasm
#include <bits/stdc++.h>
 
using namespace std;
 
#define nl '\n'
#define pb push_back
#define pf push_front
 
#define mp make_pair
#define f first
#define s second
#define sz(x) int(x.size())
 
template<class T> using V = vector<T>;
using pi = pair<int, int>;
using vi = V<int>;
using vpi = V<pi>;
 
using ll = long long;
using pl = pair<ll, ll>;
using vpl = V<pl>;
using vl = V<ll>;
 
using db = long double;
 
template<class T> using pq = priority_queue<T, V<T>, greater<T>>;
 
const int MOD = 1e9 + 7;
const ll INFL = ll(1e17);
const int LG = 18;

int main() {
	cin.tie(0)->sync_with_stdio(0);

	int N, Q; cin >> N >> Q;

	int R = -1;
	vi P(N);
	V<vi> chd(N); for(int i = 0; i < N; i++) {
		int p; cin >> p; --p;
		if (p != -1) chd[p].pb(i), P[i] = p;
		else R = i, P[i] = -1;
	}

	vi mn(N, MOD), dep(N);
	V<vi> up(N+1, vi(LG, N));
	function<void(int)> gen = [&](int u) {
		for(int i = 1; i < LG; i++) up[u][i] = up[up[u][i-1]][i-1];

		mn[u] = u;
		for(auto& v : chd[u]) {
			up[v][0] = u; dep[v] = dep[u] + 1; gen(v);
			mn[u] = min(mn[v], mn[u]);
		}

	};

	dep[R] = 0; gen(R);

	vi deg(N); for(int i = 0; i < N; i++) deg[i] = sz(chd[i]);

	vi ord(N);

	pq<pi> q; for(int i = 0; i < N; i++) if (deg[i] == 0) {
		q.push(mp(mn[i], i));
	}

	int cur = 0;
	while(sz(q)) {
		int u = q.top().s; q.pop();

		// cout << u << " " << cur << endl;
		ord[u] = cur++;

		if (P[u] != -1) {
			// cout << P[u] << endl;
			// cout << deg[P[u]] << endl;
			deg[P[u]]--; 
			if (deg[P[u]] == 0) q.push(mp(mn[P[u]], P[u]));
		}
	}
 		
 	pq<pi> W; for(int i = 0; i < N; i++) W.push(mp(ord[i], i));

 	vi C(N+1); // C[i] = 0 (off) / 1 (on)
 	for(int t = 0; t < Q; t++) {
 		int type; cin >> type;
 		if (type == 1) {
 			int k; cin >> k;
 			int lst = -1;
 			while(k--) {
 				int u = W.top().s; W.pop();
 				// cout << "ADD: " << u << endl;
 				C[u] = 1; lst = u; 
 			}
 			cout << lst + 1 << nl;
 		} else {
 			int u; cin >> u; --u;
 			int d = dep[u];

 			// assert(C[u] == 1);
 			// for(int i = LG-1; i >= 0; i--) {
 			// 	// cout << u << " " << i << endl;
 			// 	// cout << up[u][i] << endl;
 			// 	if (C[up[u][i]]) u = up[u][i];
 			// }


 			// cout << "REM: " << u << endl;

 			C[u] = 0; if (u != N) W.push(mp(ord[u], u));
 			cout << d - dep[u] << nl;
 		}
 	}

 	// for(int i = 0; i < N; i++) cout << i << " " << C[i] << endl;


	exit(0-0);
} 
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 344 KB Output isn't correct
2 Incorrect 61 ms 12268 KB Output isn't correct
3 Incorrect 45 ms 12368 KB Output isn't correct
4 Incorrect 1 ms 348 KB Output isn't correct
5 Incorrect 1 ms 348 KB Output isn't correct
6 Incorrect 1 ms 604 KB Output isn't correct
7 Incorrect 1 ms 604 KB Output isn't correct
8 Incorrect 1 ms 604 KB Output isn't correct
9 Incorrect 4 ms 1116 KB Output isn't correct
10 Incorrect 13 ms 3420 KB Output isn't correct
11 Incorrect 55 ms 12184 KB Output isn't correct
12 Incorrect 44 ms 12344 KB Output isn't correct
13 Incorrect 56 ms 12068 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Correct 21 ms 5592 KB Output is correct
2 Incorrect 108 ms 22352 KB Output isn't correct
3 Correct 64 ms 17992 KB Output is correct
4 Incorrect 36 ms 7196 KB Output isn't correct
5 Incorrect 34 ms 7124 KB Output isn't correct
6 Incorrect 34 ms 7120 KB Output isn't correct
7 Incorrect 34 ms 6096 KB Output isn't correct
8 Correct 24 ms 5588 KB Output is correct
9 Incorrect 97 ms 22576 KB Output isn't correct
10 Incorrect 108 ms 22304 KB Output isn't correct
11 Incorrect 117 ms 22344 KB Output isn't correct
12 Incorrect 95 ms 19948 KB Output isn't correct
13 Correct 84 ms 24268 KB Output is correct
14 Correct 63 ms 17996 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 36 ms 11480 KB Output isn't correct
2 Incorrect 100 ms 20368 KB Output isn't correct
3 Incorrect 73 ms 21952 KB Output isn't correct
4 Incorrect 75 ms 18256 KB Output isn't correct
5 Incorrect 65 ms 17996 KB Output isn't correct
6 Incorrect 65 ms 18000 KB Output isn't correct
7 Incorrect 81 ms 16644 KB Output isn't correct
8 Incorrect 80 ms 21960 KB Output isn't correct
9 Incorrect 98 ms 22596 KB Output isn't correct
10 Incorrect 90 ms 22344 KB Output isn't correct
11 Incorrect 112 ms 22388 KB Output isn't correct
12 Incorrect 88 ms 20464 KB Output isn't correct
13 Incorrect 103 ms 27088 KB Output isn't correct
14 Incorrect 67 ms 17964 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Incorrect 94 ms 22636 KB Output isn't correct
2 Incorrect 127 ms 20480 KB Output isn't correct
3 Correct 102 ms 27268 KB Output is correct
4 Incorrect 104 ms 22600 KB Output isn't correct
5 Incorrect 107 ms 22356 KB Output isn't correct
6 Incorrect 126 ms 22440 KB Output isn't correct
7 Incorrect 104 ms 20308 KB Output isn't correct
8 Correct 93 ms 27344 KB Output is correct
9 Correct 59 ms 17996 KB Output is correct