Submission #116334

# Submission time Handle Problem Language Result Execution time Memory
116334 2019-06-12T09:35:39 Z ZwariowanyMarcin Ball Machine (BOI13_ballmachine) C++14
100 / 100
618 ms 28336 KB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>


#define pb push_back
#define ld long double
#define fi first
#define se second
#define ll long long
#define ss(x) (int) x.size()
#define mp make_pair
#define FOR(i, n) for(int i = 1; n >= i; ++i)

using namespace std;
using namespace __gnu_pbds;

const int nax = 1e5 + 5, pod = (1 << 19), mod = 998244353;
const ll inf = 1e18;

int n, q;
int root;
vector <int> v[nax];
int black[nax], lca[nax][17];
int dp[nax];
int pr[nax];
int fre = 0;

void dfs(int node) {
	dp[node] = node;
	for(auto it: v[node]) {
		dfs(it);
		dp[node] = min(dp[node], dp[it]);
		lca[it][0] = node;
	}
}

void go(int node) {
	vector <pair<int, int>> e;
	for(auto it: v[node]) {
		e.pb(mp(dp[it], it));
	}
	sort(e.begin(), e.end());
	for(auto it: e) {
		go(it.se);
	}
	pr[node] = fre++;
}

set <pair<int, int>> s;

int add() {
	pair<int, int> x = *s.begin();
	black[x.se] = 1;
	s.erase(s.begin());
	return x.se;
}
	


int main() {
	
	cin.tie(0);
	ios_base::sync_with_stdio(0);
	
	cin >> n >> q;
	for(int i = 1; i <= n; ++i) {
		int p;
		cin >> p;
		if(!p)
			root = i;
		else
			v[p].pb(i);
	}
	dfs(root);
	for(int j = 1; j <= 16; ++j)
		for(int i = 1; i <= n; ++i)
			lca[i][j] = lca[lca[i][j - 1]][j - 1];
	go(root);
	
	for(int i = 1; i <= n; ++i) 
		s.insert(mp(pr[i], i));
	while(q--) {
		int type;
		int k;
		cin >> type >> k;
		if(type == 1) {
			int res = -1;
			while(k--) {
				res = add();
			}
			cout << res << endl;
		}
		else {
			int w = k;
			int dis = 0;
			for(int i = 16; 0 <= i; --i) {
				int r = lca[w][i];
				if(!r)
					continue;
				if(black[r]) {
					w = r;
					dis += (1 << i);
				}
			}
			black[w] = 0;
			s.insert(mp(pr[w], w));
			cout << dis << endl;
		}
	}
			
			
	
	
	
	
		
	
    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 4 ms 2688 KB Output is correct
2 Correct 315 ms 12280 KB Output is correct
3 Correct 225 ms 12152 KB Output is correct
4 Correct 4 ms 2688 KB Output is correct
5 Correct 4 ms 2688 KB Output is correct
6 Correct 6 ms 2816 KB Output is correct
7 Correct 6 ms 2816 KB Output is correct
8 Correct 6 ms 2816 KB Output is correct
9 Correct 25 ms 3328 KB Output is correct
10 Correct 56 ms 5112 KB Output is correct
11 Correct 320 ms 12152 KB Output is correct
12 Correct 226 ms 12120 KB Output is correct
13 Correct 266 ms 12280 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 140 ms 7460 KB Output is correct
2 Correct 384 ms 22252 KB Output is correct
3 Correct 249 ms 16384 KB Output is correct
4 Correct 194 ms 8800 KB Output is correct
5 Correct 199 ms 8724 KB Output is correct
6 Correct 178 ms 8588 KB Output is correct
7 Correct 189 ms 7748 KB Output is correct
8 Correct 139 ms 7416 KB Output is correct
9 Correct 377 ms 22588 KB Output is correct
10 Correct 432 ms 22204 KB Output is correct
11 Correct 351 ms 22200 KB Output is correct
12 Correct 404 ms 19420 KB Output is correct
13 Correct 304 ms 24916 KB Output is correct
14 Correct 243 ms 16384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 190 ms 12728 KB Output is correct
2 Correct 447 ms 19968 KB Output is correct
3 Correct 287 ms 23072 KB Output is correct
4 Correct 304 ms 18608 KB Output is correct
5 Correct 293 ms 18388 KB Output is correct
6 Correct 329 ms 18412 KB Output is correct
7 Correct 272 ms 16572 KB Output is correct
8 Correct 283 ms 23188 KB Output is correct
9 Correct 450 ms 22724 KB Output is correct
10 Correct 446 ms 22396 KB Output is correct
11 Correct 465 ms 22492 KB Output is correct
12 Correct 438 ms 19916 KB Output is correct
13 Correct 428 ms 28336 KB Output is correct
14 Correct 369 ms 16804 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 407 ms 22700 KB Output is correct
2 Correct 415 ms 20084 KB Output is correct
3 Correct 618 ms 27896 KB Output is correct
4 Correct 429 ms 22744 KB Output is correct
5 Correct 451 ms 22480 KB Output is correct
6 Correct 355 ms 22612 KB Output is correct
7 Correct 440 ms 20108 KB Output is correct
8 Correct 334 ms 27768 KB Output is correct
9 Correct 258 ms 16548 KB Output is correct