#include<cstdio>
#include<vector>
using namespace std;
const int SZ = 1000010;
int min(int a, int b) { return a < b ? a : b; }
int n;
int cycleNum;
vector<int>l[SZ];
typedef struct Graph {
int st[4], ts[3];
int p[SZ], sz[SZ], ln[SZ];
bool is3E[SZ], isCX[SZ];
int x;
void init() {
x = n;
st[0] = ts[0] = n;
st[1] = st[2] = st[3] = ts[1] = ts[2] = 0;
for (int i = 0; i < n; i++) {
p[i] = i;
sz[i] = 1;
ln[i] = 0;
is3E[i] = isCX[i] = false;
}
}
void init(int X) {
init();
x = X;
for (int i = 0; i < n; i++) {
for (int e : l[i]) {
if (e > i) {
if (e == x || i == x) {
isCX[e + i - x] = true;
continue;
}
int a = f(e), b = f(i);
if (a != b) {
p[b] = a;
ln[a] += ln[b];
sz[a] += sz[b];
}
ln[a]++;
}
}
st[min(gC(i), 3)]++;
if (gC(i) > 2)is3E[f(i)] = true;
}
for (int i = 0; i < n; i++) {
if (i == p[i])ts[gT(i)]++;
}
}
int f(int a) {
return a == p[a] ? a : p[a] = f(p[a]);
}
int gC(int A) {
if (A == x)return 0;
return l[A].size() - (isCX[A] ? 1 : 0);
}
void u(int A, int B) {
int a = f(A), b = f(B);
if (a != b) {
p[b] = a;
ts[gT(a)]--;
ts[gT(b)]--;
ln[a] += ln[b];
sz[a] += sz[b];
is3E[a] |= is3E[b];
}
else {
ts[gT(a)]--;
}
}
void Con(int A, int B) {
int a = f(A);
if (x == n) {
st[min(gC(A), 3)]--;
l[A].push_back(B);
st[min(gC(A), 3)]++;
}
else {
st[min(gC(A) - 1, 3)]--;
st[min(gC(A), 3)]++;
}
if (gC(A) >= 3)is3E[a] = true;
}
int gT(int a) {
if (is3E[a]) {
return 2;
}
else if (sz[a] == ln[a]) {
return 1;
}
else {
return 0;
}
}
void Link(int A, int B) {
if (A == x || B == x) {
isCX[A + B - x] = true;
return;
}
u(A, B);
Con(A, B);
Con(B, A);
int a = f(A);
ln[a]++;
ts[gT(a)]++;
}
bool isChain() {
return (ts[1] + ts[2] == 0);
}
}Graph;
Graph MG, GV[4];
int GS;
void Init(int N) {
cycleNum = n = N;
MG.init();
}
void Link(int A, int B) {
bool p = (MG.st[3] == 0);
MG.Link(A, B);
for (int i = 0; i < GS; i++) {
GV[i].Link(A, B);
}
if (MG.gT(MG.f(A)) == 1)cycleNum = MG.f(A);
if (MG.gT(MG.f(B)) == 1)cycleNum = MG.f(B);
if (p && MG.st[3]) {
int a = A;
if (l[A].size() < 3)a = B;
GS = l[a].size() + 1;
GV[l[a].size()].init(a);
for (int i = 0; i < l[a].size(); i++) {
GV[i].init(l[a][i]);
}
}
}
int CountCritical() {
if (MG.ts[2]) {
int r = 0;
for (int i = 0; i < GS; i++) {
if (GV[i].isChain())r++;
}
return r;
}
else if (MG.ts[1]) {
if (MG.ts[1] > 1)return 0;
return MG.sz[cycleNum];
}
else {
return n;
}
}
Compilation message
rings.cpp: In function 'void Link(int, int)':
rings.cpp:131:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
131 | for (int i = 0; i < l[a].size(); i++) {
| ~~^~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
15 ms |
23768 KB |
Output is correct |
2 |
Correct |
19 ms |
24396 KB |
Output is correct |
3 |
Correct |
20 ms |
24408 KB |
Output is correct |
4 |
Correct |
16 ms |
23756 KB |
Output is correct |
5 |
Correct |
16 ms |
23876 KB |
Output is correct |
6 |
Correct |
17 ms |
24072 KB |
Output is correct |
7 |
Correct |
16 ms |
24304 KB |
Output is correct |
8 |
Correct |
17 ms |
24012 KB |
Output is correct |
9 |
Correct |
19 ms |
24496 KB |
Output is correct |
10 |
Correct |
19 ms |
24508 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
470 ms |
47380 KB |
Output is correct |
2 |
Correct |
2396 ms |
103696 KB |
Output is correct |
3 |
Correct |
3762 ms |
119608 KB |
Output is correct |
4 |
Correct |
1144 ms |
68732 KB |
Output is correct |
5 |
Correct |
1150 ms |
68756 KB |
Output is correct |
6 |
Correct |
1112 ms |
67664 KB |
Output is correct |
7 |
Correct |
3628 ms |
118976 KB |
Output is correct |
8 |
Correct |
2314 ms |
117360 KB |
Output is correct |
9 |
Correct |
2246 ms |
123712 KB |
Output is correct |
10 |
Correct |
844 ms |
67560 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
15 ms |
23768 KB |
Output is correct |
2 |
Correct |
19 ms |
24396 KB |
Output is correct |
3 |
Correct |
20 ms |
24408 KB |
Output is correct |
4 |
Correct |
16 ms |
23756 KB |
Output is correct |
5 |
Correct |
16 ms |
23876 KB |
Output is correct |
6 |
Correct |
17 ms |
24072 KB |
Output is correct |
7 |
Correct |
16 ms |
24304 KB |
Output is correct |
8 |
Correct |
17 ms |
24012 KB |
Output is correct |
9 |
Correct |
19 ms |
24496 KB |
Output is correct |
10 |
Correct |
19 ms |
24508 KB |
Output is correct |
11 |
Correct |
19 ms |
24472 KB |
Output is correct |
12 |
Correct |
21 ms |
25008 KB |
Output is correct |
13 |
Correct |
23 ms |
24908 KB |
Output is correct |
14 |
Correct |
22 ms |
24880 KB |
Output is correct |
15 |
Correct |
26 ms |
25444 KB |
Output is correct |
16 |
Correct |
20 ms |
24228 KB |
Output is correct |
17 |
Correct |
23 ms |
24920 KB |
Output is correct |
18 |
Correct |
28 ms |
25656 KB |
Output is correct |
19 |
Correct |
20 ms |
24268 KB |
Output is correct |
20 |
Correct |
23 ms |
24956 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
15 ms |
23768 KB |
Output is correct |
2 |
Correct |
19 ms |
24396 KB |
Output is correct |
3 |
Correct |
20 ms |
24408 KB |
Output is correct |
4 |
Correct |
16 ms |
23756 KB |
Output is correct |
5 |
Correct |
16 ms |
23876 KB |
Output is correct |
6 |
Correct |
17 ms |
24072 KB |
Output is correct |
7 |
Correct |
16 ms |
24304 KB |
Output is correct |
8 |
Correct |
17 ms |
24012 KB |
Output is correct |
9 |
Correct |
19 ms |
24496 KB |
Output is correct |
10 |
Correct |
19 ms |
24508 KB |
Output is correct |
11 |
Correct |
19 ms |
24472 KB |
Output is correct |
12 |
Correct |
21 ms |
25008 KB |
Output is correct |
13 |
Correct |
23 ms |
24908 KB |
Output is correct |
14 |
Correct |
22 ms |
24880 KB |
Output is correct |
15 |
Correct |
26 ms |
25444 KB |
Output is correct |
16 |
Correct |
20 ms |
24228 KB |
Output is correct |
17 |
Correct |
23 ms |
24920 KB |
Output is correct |
18 |
Correct |
28 ms |
25656 KB |
Output is correct |
19 |
Correct |
20 ms |
24268 KB |
Output is correct |
20 |
Correct |
23 ms |
24956 KB |
Output is correct |
21 |
Correct |
35 ms |
25500 KB |
Output is correct |
22 |
Correct |
48 ms |
26520 KB |
Output is correct |
23 |
Correct |
55 ms |
27284 KB |
Output is correct |
24 |
Correct |
135 ms |
31924 KB |
Output is correct |
25 |
Correct |
42 ms |
31048 KB |
Output is correct |
26 |
Correct |
136 ms |
32588 KB |
Output is correct |
27 |
Correct |
71 ms |
27716 KB |
Output is correct |
28 |
Correct |
155 ms |
32892 KB |
Output is correct |
29 |
Correct |
92 ms |
32372 KB |
Output is correct |
30 |
Correct |
74 ms |
28204 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
15 ms |
23768 KB |
Output is correct |
2 |
Correct |
19 ms |
24396 KB |
Output is correct |
3 |
Correct |
20 ms |
24408 KB |
Output is correct |
4 |
Correct |
16 ms |
23756 KB |
Output is correct |
5 |
Correct |
16 ms |
23876 KB |
Output is correct |
6 |
Correct |
17 ms |
24072 KB |
Output is correct |
7 |
Correct |
16 ms |
24304 KB |
Output is correct |
8 |
Correct |
17 ms |
24012 KB |
Output is correct |
9 |
Correct |
19 ms |
24496 KB |
Output is correct |
10 |
Correct |
19 ms |
24508 KB |
Output is correct |
11 |
Correct |
470 ms |
47380 KB |
Output is correct |
12 |
Correct |
2396 ms |
103696 KB |
Output is correct |
13 |
Correct |
3762 ms |
119608 KB |
Output is correct |
14 |
Correct |
1144 ms |
68732 KB |
Output is correct |
15 |
Correct |
1150 ms |
68756 KB |
Output is correct |
16 |
Correct |
1112 ms |
67664 KB |
Output is correct |
17 |
Correct |
3628 ms |
118976 KB |
Output is correct |
18 |
Correct |
2314 ms |
117360 KB |
Output is correct |
19 |
Correct |
2246 ms |
123712 KB |
Output is correct |
20 |
Correct |
844 ms |
67560 KB |
Output is correct |
21 |
Correct |
19 ms |
24472 KB |
Output is correct |
22 |
Correct |
21 ms |
25008 KB |
Output is correct |
23 |
Correct |
23 ms |
24908 KB |
Output is correct |
24 |
Correct |
22 ms |
24880 KB |
Output is correct |
25 |
Correct |
26 ms |
25444 KB |
Output is correct |
26 |
Correct |
20 ms |
24228 KB |
Output is correct |
27 |
Correct |
23 ms |
24920 KB |
Output is correct |
28 |
Correct |
28 ms |
25656 KB |
Output is correct |
29 |
Correct |
20 ms |
24268 KB |
Output is correct |
30 |
Correct |
23 ms |
24956 KB |
Output is correct |
31 |
Correct |
35 ms |
25500 KB |
Output is correct |
32 |
Correct |
48 ms |
26520 KB |
Output is correct |
33 |
Correct |
55 ms |
27284 KB |
Output is correct |
34 |
Correct |
135 ms |
31924 KB |
Output is correct |
35 |
Correct |
42 ms |
31048 KB |
Output is correct |
36 |
Correct |
136 ms |
32588 KB |
Output is correct |
37 |
Correct |
71 ms |
27716 KB |
Output is correct |
38 |
Correct |
155 ms |
32892 KB |
Output is correct |
39 |
Correct |
92 ms |
32372 KB |
Output is correct |
40 |
Correct |
74 ms |
28204 KB |
Output is correct |
41 |
Correct |
247 ms |
39228 KB |
Output is correct |
42 |
Correct |
1004 ms |
97192 KB |
Output is correct |
43 |
Correct |
489 ms |
90820 KB |
Output is correct |
44 |
Correct |
2478 ms |
115404 KB |
Output is correct |
45 |
Correct |
2536 ms |
112948 KB |
Output is correct |
46 |
Correct |
833 ms |
61796 KB |
Output is correct |
47 |
Correct |
994 ms |
62300 KB |
Output is correct |
48 |
Correct |
1262 ms |
108932 KB |
Output is correct |
49 |
Correct |
761 ms |
63228 KB |
Output is correct |
50 |
Correct |
799 ms |
62632 KB |
Output is correct |
51 |
Correct |
669 ms |
83340 KB |
Output is correct |
52 |
Correct |
2045 ms |
97324 KB |
Output is correct |
53 |
Correct |
1336 ms |
109208 KB |
Output is correct |
54 |
Correct |
2308 ms |
104688 KB |
Output is correct |
55 |
Correct |
3115 ms |
111820 KB |
Output is correct |