# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
827110 |
2023-08-16T08:49:21 Z |
Sohsoh84 |
Keys (IOI21_keys) |
C++17 |
|
2638 ms |
166024 KB |
#include "keys.h"
#include <bits/stdc++.h>
using namespace std;
#define sep ' '
#define debug(x) cerr << #x << ": " << x << endl;
const int MAXN = 1e6 + 10;
int sz[MAXN], F[MAXN], par[MAXN], n, m, R[MAXN], T[MAXN], from[MAXN], to[MAXN];
bool dead[MAXN], vis[MAXN], tvis[MAXN];
vector<int> dfs_vec, C[MAXN], adj[MAXN];
bool dfs_finished;
inline int f(int ind, int v) {
return from[ind] ^ to[ind] ^ v;
}
inline bool unite(int u, int v) { // check the order
u = par[u], v = par[v];
if (u == v) return false;
int tf = F[v];
if (C[u].size() < C[v].size()) swap(u, v);
for (int e : C[v]) {
par[e] = u;
C[u].push_back(e);
}
F[u] = tf;
C[v].clear();
return true;
}
int fuck;
vector<int> key_vis, vert_vis, unlock[MAXN];
set<int> keys;
void add_key(int x);
void add_vert(int v) {
if (dfs_finished) return;
if (par[v] != fuck) {
if (dead[v]) {
for (int e : C[fuck])
dead[e] = true, sz[e] = MAXN;
} else {
unite(fuck, v);
tvis[par[v]] = true;
}
dfs_finished = true;
return;
}
if (vis[v]) return;
dfs_vec.push_back(v);
vis[v] = true;
vert_vis.push_back(v);
add_key(R[v]);
for (int ind : adj[v]) {
key_vis.push_back(T[ind]);
if (keys.find(T[ind]) != keys.end())
add_vert(f(ind, v));
else
unlock[T[ind]].push_back(f(ind, v));
if (dfs_finished) return;
}
}
void add_key(int x) {
if (dfs_finished) return;
key_vis.push_back(x);
keys.insert(x);
for (int e : unlock[x]) {
add_vert(e);
if (dfs_finished) return;
}
}
inline void bruvka() {
memset(tvis, false, sizeof tvis);
for (int vv = 0; vv < n; vv++) {
if (!dead[vv] && !tvis[par[vv]]) {
int v = F[par[vv]];
fuck = par[vv];
add_vert(v);
if (!dfs_finished) {
for (int e : dfs_vec)
sz[e] = dfs_vec.size();
for (int e : C[fuck]) {
dead[e] = true;
if (!sz[e]) sz[e] = MAXN;
}
}
dfs_finished = false;
for (int e : dfs_vec) vis[e] = false;
dfs_vec.clear();
keys.clear();
for (int e : key_vis) unlock[e].clear();
for (int e : vert_vis) vis[e] = false;
key_vis.clear();
vert_vis.clear();
}
}
}
vector<int> find_reachable(vector<int> r_, vector<int> u_, vector<int> v_, vector<int> c_) {
n = r_.size(), m = u_.size();
for (int i = 0; i < m; i++) {
adj[u_[i]].push_back(i);
adj[v_[i]].push_back(i);
from[i] = v_[i];
to[i] = u_[i];
T[i] = c_[i];
}
for (int i = 0; i < n; i++)
R[i] = r_[i];
vector<int> fans(r_.size(), 1);
for (int i = 0; i < n; i++) {
par[i] = i;
C[i] = {i};
F[i] = i;
}
for (int i = 0; i < 20; i++) // TODO
bruvka();
/*
for (int i = 0; i < n; i++) {
cerr << F[par[i]] << sep;
}
cerr << endl;
for (int i = 0; i < n; i++)
cerr << sz[i] << sep;
cerr << endl;
*/
int mn = *min_element(sz, sz + n);
for (int i = 0; i < n; i++)
fans[i] = (sz[i] == mn);
return fans;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
64 ms |
71756 KB |
Output is correct |
2 |
Correct |
39 ms |
71760 KB |
Output is correct |
3 |
Correct |
39 ms |
71772 KB |
Output is correct |
4 |
Correct |
38 ms |
71804 KB |
Output is correct |
5 |
Correct |
38 ms |
71700 KB |
Output is correct |
6 |
Correct |
42 ms |
71732 KB |
Output is correct |
7 |
Correct |
45 ms |
71748 KB |
Output is correct |
8 |
Correct |
37 ms |
71756 KB |
Output is correct |
9 |
Correct |
41 ms |
71748 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
64 ms |
71756 KB |
Output is correct |
2 |
Correct |
39 ms |
71760 KB |
Output is correct |
3 |
Correct |
39 ms |
71772 KB |
Output is correct |
4 |
Correct |
38 ms |
71804 KB |
Output is correct |
5 |
Correct |
38 ms |
71700 KB |
Output is correct |
6 |
Correct |
42 ms |
71732 KB |
Output is correct |
7 |
Correct |
45 ms |
71748 KB |
Output is correct |
8 |
Correct |
37 ms |
71756 KB |
Output is correct |
9 |
Correct |
41 ms |
71748 KB |
Output is correct |
10 |
Correct |
38 ms |
71712 KB |
Output is correct |
11 |
Correct |
45 ms |
71800 KB |
Output is correct |
12 |
Correct |
52 ms |
71800 KB |
Output is correct |
13 |
Correct |
57 ms |
71680 KB |
Output is correct |
14 |
Correct |
43 ms |
71664 KB |
Output is correct |
15 |
Correct |
39 ms |
71756 KB |
Output is correct |
16 |
Correct |
46 ms |
71784 KB |
Output is correct |
17 |
Correct |
38 ms |
71680 KB |
Output is correct |
18 |
Correct |
43 ms |
71760 KB |
Output is correct |
19 |
Correct |
46 ms |
71732 KB |
Output is correct |
20 |
Correct |
38 ms |
71784 KB |
Output is correct |
21 |
Correct |
38 ms |
71776 KB |
Output is correct |
22 |
Correct |
37 ms |
71732 KB |
Output is correct |
23 |
Correct |
38 ms |
71752 KB |
Output is correct |
24 |
Correct |
38 ms |
71804 KB |
Output is correct |
25 |
Correct |
38 ms |
71864 KB |
Output is correct |
26 |
Correct |
38 ms |
71724 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
64 ms |
71756 KB |
Output is correct |
2 |
Correct |
39 ms |
71760 KB |
Output is correct |
3 |
Correct |
39 ms |
71772 KB |
Output is correct |
4 |
Correct |
38 ms |
71804 KB |
Output is correct |
5 |
Correct |
38 ms |
71700 KB |
Output is correct |
6 |
Correct |
42 ms |
71732 KB |
Output is correct |
7 |
Correct |
45 ms |
71748 KB |
Output is correct |
8 |
Correct |
37 ms |
71756 KB |
Output is correct |
9 |
Correct |
41 ms |
71748 KB |
Output is correct |
10 |
Correct |
38 ms |
71712 KB |
Output is correct |
11 |
Correct |
45 ms |
71800 KB |
Output is correct |
12 |
Correct |
52 ms |
71800 KB |
Output is correct |
13 |
Correct |
57 ms |
71680 KB |
Output is correct |
14 |
Correct |
43 ms |
71664 KB |
Output is correct |
15 |
Correct |
39 ms |
71756 KB |
Output is correct |
16 |
Correct |
46 ms |
71784 KB |
Output is correct |
17 |
Correct |
38 ms |
71680 KB |
Output is correct |
18 |
Correct |
43 ms |
71760 KB |
Output is correct |
19 |
Correct |
46 ms |
71732 KB |
Output is correct |
20 |
Correct |
38 ms |
71784 KB |
Output is correct |
21 |
Correct |
38 ms |
71776 KB |
Output is correct |
22 |
Correct |
37 ms |
71732 KB |
Output is correct |
23 |
Correct |
38 ms |
71752 KB |
Output is correct |
24 |
Correct |
38 ms |
71804 KB |
Output is correct |
25 |
Correct |
38 ms |
71864 KB |
Output is correct |
26 |
Correct |
38 ms |
71724 KB |
Output is correct |
27 |
Correct |
39 ms |
72032 KB |
Output is correct |
28 |
Correct |
41 ms |
72012 KB |
Output is correct |
29 |
Correct |
46 ms |
72104 KB |
Output is correct |
30 |
Correct |
40 ms |
71900 KB |
Output is correct |
31 |
Correct |
41 ms |
71884 KB |
Output is correct |
32 |
Correct |
39 ms |
71772 KB |
Output is correct |
33 |
Correct |
45 ms |
71908 KB |
Output is correct |
34 |
Correct |
44 ms |
72060 KB |
Output is correct |
35 |
Correct |
41 ms |
72064 KB |
Output is correct |
36 |
Correct |
40 ms |
71956 KB |
Output is correct |
37 |
Correct |
47 ms |
72348 KB |
Output is correct |
38 |
Correct |
61 ms |
72124 KB |
Output is correct |
39 |
Correct |
48 ms |
72420 KB |
Output is correct |
40 |
Correct |
43 ms |
71900 KB |
Output is correct |
41 |
Correct |
47 ms |
71924 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
64 ms |
71756 KB |
Output is correct |
2 |
Correct |
39 ms |
71760 KB |
Output is correct |
3 |
Correct |
39 ms |
71772 KB |
Output is correct |
4 |
Correct |
38 ms |
71804 KB |
Output is correct |
5 |
Correct |
38 ms |
71700 KB |
Output is correct |
6 |
Correct |
42 ms |
71732 KB |
Output is correct |
7 |
Correct |
45 ms |
71748 KB |
Output is correct |
8 |
Correct |
37 ms |
71756 KB |
Output is correct |
9 |
Correct |
41 ms |
71748 KB |
Output is correct |
10 |
Correct |
277 ms |
110344 KB |
Output is correct |
11 |
Correct |
2638 ms |
124964 KB |
Output is correct |
12 |
Correct |
75 ms |
79436 KB |
Output is correct |
13 |
Correct |
341 ms |
111536 KB |
Output is correct |
14 |
Correct |
250 ms |
160880 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
64 ms |
71756 KB |
Output is correct |
2 |
Correct |
39 ms |
71760 KB |
Output is correct |
3 |
Correct |
39 ms |
71772 KB |
Output is correct |
4 |
Correct |
38 ms |
71804 KB |
Output is correct |
5 |
Correct |
38 ms |
71700 KB |
Output is correct |
6 |
Correct |
42 ms |
71732 KB |
Output is correct |
7 |
Correct |
45 ms |
71748 KB |
Output is correct |
8 |
Correct |
37 ms |
71756 KB |
Output is correct |
9 |
Correct |
41 ms |
71748 KB |
Output is correct |
10 |
Correct |
38 ms |
71712 KB |
Output is correct |
11 |
Correct |
45 ms |
71800 KB |
Output is correct |
12 |
Correct |
52 ms |
71800 KB |
Output is correct |
13 |
Correct |
57 ms |
71680 KB |
Output is correct |
14 |
Correct |
43 ms |
71664 KB |
Output is correct |
15 |
Correct |
39 ms |
71756 KB |
Output is correct |
16 |
Correct |
46 ms |
71784 KB |
Output is correct |
17 |
Correct |
38 ms |
71680 KB |
Output is correct |
18 |
Correct |
43 ms |
71760 KB |
Output is correct |
19 |
Correct |
46 ms |
71732 KB |
Output is correct |
20 |
Correct |
38 ms |
71784 KB |
Output is correct |
21 |
Correct |
38 ms |
71776 KB |
Output is correct |
22 |
Correct |
37 ms |
71732 KB |
Output is correct |
23 |
Correct |
38 ms |
71752 KB |
Output is correct |
24 |
Correct |
38 ms |
71804 KB |
Output is correct |
25 |
Correct |
38 ms |
71864 KB |
Output is correct |
26 |
Correct |
38 ms |
71724 KB |
Output is correct |
27 |
Correct |
39 ms |
72032 KB |
Output is correct |
28 |
Correct |
41 ms |
72012 KB |
Output is correct |
29 |
Correct |
46 ms |
72104 KB |
Output is correct |
30 |
Correct |
40 ms |
71900 KB |
Output is correct |
31 |
Correct |
41 ms |
71884 KB |
Output is correct |
32 |
Correct |
39 ms |
71772 KB |
Output is correct |
33 |
Correct |
45 ms |
71908 KB |
Output is correct |
34 |
Correct |
44 ms |
72060 KB |
Output is correct |
35 |
Correct |
41 ms |
72064 KB |
Output is correct |
36 |
Correct |
40 ms |
71956 KB |
Output is correct |
37 |
Correct |
47 ms |
72348 KB |
Output is correct |
38 |
Correct |
61 ms |
72124 KB |
Output is correct |
39 |
Correct |
48 ms |
72420 KB |
Output is correct |
40 |
Correct |
43 ms |
71900 KB |
Output is correct |
41 |
Correct |
47 ms |
71924 KB |
Output is correct |
42 |
Correct |
277 ms |
110344 KB |
Output is correct |
43 |
Correct |
2638 ms |
124964 KB |
Output is correct |
44 |
Correct |
75 ms |
79436 KB |
Output is correct |
45 |
Correct |
341 ms |
111536 KB |
Output is correct |
46 |
Correct |
250 ms |
160880 KB |
Output is correct |
47 |
Correct |
38 ms |
71772 KB |
Output is correct |
48 |
Correct |
38 ms |
71688 KB |
Output is correct |
49 |
Correct |
38 ms |
71756 KB |
Output is correct |
50 |
Correct |
196 ms |
141384 KB |
Output is correct |
51 |
Correct |
220 ms |
144408 KB |
Output is correct |
52 |
Correct |
272 ms |
107384 KB |
Output is correct |
53 |
Correct |
358 ms |
107408 KB |
Output is correct |
54 |
Correct |
352 ms |
107452 KB |
Output is correct |
55 |
Correct |
397 ms |
113316 KB |
Output is correct |
56 |
Correct |
392 ms |
124580 KB |
Output is correct |
57 |
Correct |
276 ms |
119052 KB |
Output is correct |
58 |
Correct |
416 ms |
130636 KB |
Output is correct |
59 |
Correct |
617 ms |
134932 KB |
Output is correct |
60 |
Correct |
686 ms |
152684 KB |
Output is correct |
61 |
Correct |
658 ms |
154484 KB |
Output is correct |
62 |
Correct |
1164 ms |
132904 KB |
Output is correct |
63 |
Correct |
187 ms |
108776 KB |
Output is correct |
64 |
Correct |
38 ms |
73324 KB |
Output is correct |
65 |
Correct |
39 ms |
73500 KB |
Output is correct |
66 |
Correct |
1237 ms |
126716 KB |
Output is correct |
67 |
Correct |
63 ms |
81364 KB |
Output is correct |
68 |
Correct |
68 ms |
87972 KB |
Output is correct |
69 |
Correct |
621 ms |
134812 KB |
Output is correct |
70 |
Correct |
101 ms |
103772 KB |
Output is correct |
71 |
Correct |
245 ms |
166024 KB |
Output is correct |
72 |
Correct |
575 ms |
135008 KB |
Output is correct |
73 |
Correct |
1106 ms |
133116 KB |
Output is correct |