#include "catdog.h"
#include <algorithm>
#include <functional>
using namespace std;
typedef pair<int, int> pii;
typedef long long llong;
const llong inf = 1e16;
const int MAXN = 1e6;
struct node {
llong val[2][2];
node() {
val[0][0] = val[1][1] = 0;
val[0][1] = val[1][0] = inf;
}
node operator+(const node &p) const {
node ret;
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 2; ++j) {
ret.val[i][j] = inf;
for (int k = 0; k < 2; ++k) {
for (int l = 0; l < 2; ++l) {
ret.val[i][j] = min(ret.val[i][j]
, val[i][k] + p.val[l][j] + (k ^ l));
}
}
}
}
return ret;
}
};
struct segtree {
vector<node> val;
int sz;
void init(int i, int s, int e) {
if (s == e) return;
int m = (s + e) / 2;
init(i << 1, s, m);
init(i << 1 | 1, m + 1, e);
val[i] = val[i << 1] + val[i << 1 | 1];
}
void init(int _sz) {
int s = 1;
sz = _sz;
while (s < (sz << 1)) s <<= 1;
val.resize(s);
init(1, 1, sz);
}
void update(int i, int s, int e, int x, llong v0, llong v1) {
if (s == e) {
val[i].val[0][0] += v0;
val[i].val[1][1] += v1;
return;
}
int m = (s + e) / 2;
if (x <= m) update(i << 1, s, m, x, v0, v1);
else update(i << 1 | 1, m + 1, e, x, v0, v1);
val[i] = val[i << 1] + val[i << 1 | 1];
}
void update(int i, llong x0, llong x1) {
update(1, 1, sz, i, x0, x1);
}
pii query() const {
int x = min(val[1].val[0][0], val[1].val[0][1]);
int y = min(val[1].val[1][0], val[1].val[1][1]);
return pii(min(x, y + 1), min(x + 1, y));
}
} seg[100001];
int n;
vector<int> edge[100001];
int sz[100001];
int pathPar[100001];
int pathPos[100001];
int par[100001];
int st[100001];
void dfsSize(int x, int p) {
par[x] = p;
sz[x] = 1;
for (int i : edge[x]) {
if (i == p) continue;
dfsSize(i, x);
sz[x] += sz[i];
}
}
void dfsDecomp(int x, int p) {
int hpath = 0;
for (int i : edge[x]) {
if (i == p) continue;
if (sz[x] <= (sz[i] << 1)) {
hpath = i;
break;
}
}
if (hpath == 0) seg[pathPar[x]].init(pathPos[x]);
for (int i : edge[x]) {
if (i == p) continue;
if (i != hpath) {
pathPar[i] = i;
pathPos[i] = 1;
}
else {
pathPar[i] = pathPar[x];
pathPos[i] = pathPos[x] + 1;
}
dfsDecomp(i, x);
}
}
void initialize(int N, vector<int> A, vector<int> B) {
n = N;
for (int i = 0; i < n - 1; ++i) {
edge[A[i]].push_back(B[i]);
edge[B[i]].push_back(A[i]);
}
dfsSize(1, 0);
pathPar[1] = 1;
pathPos[1] = 1;
dfsDecomp(1, 0);
}
void update(int x, int v0, int v1) {
while (x) {
int path = pathPar[x];
int pr0, pr1, nx0, nx1;
tie(pr0, pr1) = seg[path].query();
seg[path].update(pathPos[x], v0, v1);
tie(nx0, nx1) = seg[path].query();
v0 = nx0 - pr0;
v1 = nx1 - pr1;
x = par[pathPar[x]];
}
}
int getAns() {
int x, y;
tie(x, y) = seg[1].query();
return min(x, y);
}
int cat(int v) {
st[v] = 1;
update(v, MAXN, 0);
return getAns();
}
int dog(int v) {
st[v] = 2;
update(v, 0, MAXN);
return getAns();
}
int neighbor(int v) {
if (st[v] == 1) update(v, -MAXN, 0);
else update(v, 0, -MAXN);
st[v] = 0;
return getAns();
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
6 ms |
5752 KB |
Output is correct |
2 |
Correct |
6 ms |
5888 KB |
Output is correct |
3 |
Correct |
6 ms |
6072 KB |
Output is correct |
4 |
Correct |
7 ms |
6072 KB |
Output is correct |
5 |
Correct |
7 ms |
6072 KB |
Output is correct |
6 |
Correct |
6 ms |
6132 KB |
Output is correct |
7 |
Correct |
7 ms |
6132 KB |
Output is correct |
8 |
Correct |
6 ms |
6132 KB |
Output is correct |
9 |
Correct |
6 ms |
6132 KB |
Output is correct |
10 |
Correct |
7 ms |
6132 KB |
Output is correct |
11 |
Correct |
6 ms |
6132 KB |
Output is correct |
12 |
Correct |
6 ms |
6132 KB |
Output is correct |
13 |
Correct |
6 ms |
6132 KB |
Output is correct |
14 |
Correct |
7 ms |
6132 KB |
Output is correct |
15 |
Correct |
7 ms |
6132 KB |
Output is correct |
16 |
Correct |
7 ms |
6132 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
6 ms |
5752 KB |
Output is correct |
2 |
Correct |
6 ms |
5888 KB |
Output is correct |
3 |
Correct |
6 ms |
6072 KB |
Output is correct |
4 |
Correct |
7 ms |
6072 KB |
Output is correct |
5 |
Correct |
7 ms |
6072 KB |
Output is correct |
6 |
Correct |
6 ms |
6132 KB |
Output is correct |
7 |
Correct |
7 ms |
6132 KB |
Output is correct |
8 |
Correct |
6 ms |
6132 KB |
Output is correct |
9 |
Correct |
6 ms |
6132 KB |
Output is correct |
10 |
Correct |
7 ms |
6132 KB |
Output is correct |
11 |
Correct |
6 ms |
6132 KB |
Output is correct |
12 |
Correct |
6 ms |
6132 KB |
Output is correct |
13 |
Correct |
6 ms |
6132 KB |
Output is correct |
14 |
Correct |
7 ms |
6132 KB |
Output is correct |
15 |
Correct |
7 ms |
6132 KB |
Output is correct |
16 |
Correct |
7 ms |
6132 KB |
Output is correct |
17 |
Correct |
11 ms |
6140 KB |
Output is correct |
18 |
Correct |
8 ms |
6140 KB |
Output is correct |
19 |
Correct |
9 ms |
6144 KB |
Output is correct |
20 |
Correct |
7 ms |
6144 KB |
Output is correct |
21 |
Correct |
6 ms |
6144 KB |
Output is correct |
22 |
Correct |
7 ms |
6144 KB |
Output is correct |
23 |
Correct |
8 ms |
6268 KB |
Output is correct |
24 |
Correct |
7 ms |
6268 KB |
Output is correct |
25 |
Correct |
8 ms |
6268 KB |
Output is correct |
26 |
Correct |
10 ms |
6268 KB |
Output is correct |
27 |
Correct |
7 ms |
6268 KB |
Output is correct |
28 |
Correct |
9 ms |
6524 KB |
Output is correct |
29 |
Correct |
9 ms |
6652 KB |
Output is correct |
30 |
Correct |
9 ms |
6652 KB |
Output is correct |
31 |
Correct |
8 ms |
6652 KB |
Output is correct |
32 |
Correct |
8 ms |
6652 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
6 ms |
5752 KB |
Output is correct |
2 |
Correct |
6 ms |
5888 KB |
Output is correct |
3 |
Correct |
6 ms |
6072 KB |
Output is correct |
4 |
Correct |
7 ms |
6072 KB |
Output is correct |
5 |
Correct |
7 ms |
6072 KB |
Output is correct |
6 |
Correct |
6 ms |
6132 KB |
Output is correct |
7 |
Correct |
7 ms |
6132 KB |
Output is correct |
8 |
Correct |
6 ms |
6132 KB |
Output is correct |
9 |
Correct |
6 ms |
6132 KB |
Output is correct |
10 |
Correct |
7 ms |
6132 KB |
Output is correct |
11 |
Correct |
6 ms |
6132 KB |
Output is correct |
12 |
Correct |
6 ms |
6132 KB |
Output is correct |
13 |
Correct |
6 ms |
6132 KB |
Output is correct |
14 |
Correct |
7 ms |
6132 KB |
Output is correct |
15 |
Correct |
7 ms |
6132 KB |
Output is correct |
16 |
Correct |
7 ms |
6132 KB |
Output is correct |
17 |
Correct |
11 ms |
6140 KB |
Output is correct |
18 |
Correct |
8 ms |
6140 KB |
Output is correct |
19 |
Correct |
9 ms |
6144 KB |
Output is correct |
20 |
Correct |
7 ms |
6144 KB |
Output is correct |
21 |
Correct |
6 ms |
6144 KB |
Output is correct |
22 |
Correct |
7 ms |
6144 KB |
Output is correct |
23 |
Correct |
8 ms |
6268 KB |
Output is correct |
24 |
Correct |
7 ms |
6268 KB |
Output is correct |
25 |
Correct |
8 ms |
6268 KB |
Output is correct |
26 |
Correct |
10 ms |
6268 KB |
Output is correct |
27 |
Correct |
7 ms |
6268 KB |
Output is correct |
28 |
Correct |
9 ms |
6524 KB |
Output is correct |
29 |
Correct |
9 ms |
6652 KB |
Output is correct |
30 |
Correct |
9 ms |
6652 KB |
Output is correct |
31 |
Correct |
8 ms |
6652 KB |
Output is correct |
32 |
Correct |
8 ms |
6652 KB |
Output is correct |
33 |
Correct |
200 ms |
14472 KB |
Output is correct |
34 |
Correct |
134 ms |
15740 KB |
Output is correct |
35 |
Correct |
159 ms |
15740 KB |
Output is correct |
36 |
Correct |
236 ms |
20324 KB |
Output is correct |
37 |
Correct |
40 ms |
20324 KB |
Output is correct |
38 |
Correct |
360 ms |
21952 KB |
Output is correct |
39 |
Correct |
393 ms |
21952 KB |
Output is correct |
40 |
Correct |
276 ms |
22060 KB |
Output is correct |
41 |
Correct |
275 ms |
22060 KB |
Output is correct |
42 |
Correct |
248 ms |
22060 KB |
Output is correct |
43 |
Correct |
265 ms |
22092 KB |
Output is correct |
44 |
Correct |
309 ms |
22092 KB |
Output is correct |
45 |
Correct |
317 ms |
22172 KB |
Output is correct |
46 |
Correct |
387 ms |
22172 KB |
Output is correct |
47 |
Correct |
418 ms |
22172 KB |
Output is correct |
48 |
Correct |
131 ms |
22172 KB |
Output is correct |
49 |
Correct |
154 ms |
22172 KB |
Output is correct |
50 |
Correct |
40 ms |
22172 KB |
Output is correct |
51 |
Correct |
43 ms |
22172 KB |
Output is correct |
52 |
Correct |
32 ms |
22172 KB |
Output is correct |
53 |
Correct |
240 ms |
22172 KB |
Output is correct |
54 |
Correct |
113 ms |
22172 KB |
Output is correct |
55 |
Correct |
265 ms |
22172 KB |
Output is correct |
56 |
Correct |
164 ms |
22172 KB |
Output is correct |
57 |
Correct |
285 ms |
22172 KB |
Output is correct |
58 |
Correct |
53 ms |
22172 KB |
Output is correct |
59 |
Correct |
56 ms |
22172 KB |
Output is correct |
60 |
Correct |
159 ms |
22172 KB |
Output is correct |
61 |
Correct |
150 ms |
22172 KB |
Output is correct |
62 |
Correct |
87 ms |
22172 KB |
Output is correct |
63 |
Correct |
85 ms |
33468 KB |
Output is correct |
64 |
Correct |
117 ms |
44732 KB |
Output is correct |
65 |
Correct |
138 ms |
65760 KB |
Output is correct |
66 |
Correct |
67 ms |
65760 KB |
Output is correct |
67 |
Correct |
109 ms |
65760 KB |
Output is correct |
68 |
Correct |
232 ms |
65760 KB |
Output is correct |
69 |
Correct |
41 ms |
65760 KB |
Output is correct |
70 |
Correct |
15 ms |
65760 KB |
Output is correct |
71 |
Correct |
80 ms |
65760 KB |
Output is correct |
72 |
Correct |
135 ms |
65760 KB |
Output is correct |
73 |
Correct |
244 ms |
81468 KB |
Output is correct |
74 |
Correct |
308 ms |
81468 KB |
Output is correct |
75 |
Correct |
266 ms |
81468 KB |
Output is correct |
76 |
Correct |
311 ms |
81468 KB |
Output is correct |
77 |
Correct |
297 ms |
81468 KB |
Output is correct |