#include<bits/stdc++.h>
using namespace std;
vector<int> adj[1000005];
int n, vis[1000005], p[1000005], s[1000005], timer = 0;
bool f = 1;
int find(int x) {
if (p[x] == x) {
return x;
}
p[x] = find(p[x]);
return p[x];
}
void merge(int a, int b) {
a = find(a);
b = find(b);
if (a == b) {
return;
}
if (s[b] > s[a]) {
swap(a, b);
}
s[a] += s[b];
p[b] = a;
}
set<int> st;
void Init(int N_) {
n = N_;
for (int i = 0; i < n; i++) {
st.insert(i);
p[i] = i;
s[i] = 1;
}
}
void dfs(int i, int p, int s) {
if (vis[i] == timer) {
f = 0;
return;
}
vis[i] = timer;
for (int j : adj[i]) {
if (j == p || j == s) {
continue;
}
dfs(j, i, s);
}
}
int calc(int a) {
timer++;
vector<int> co(n, 0);
for (int j : adj[a]) {
co[j]++;
}
f = 1;
for (int i = 0; i < n; i++) {
if (i != a && adj[i].size()-co[i] > 2) {
f = 0;
break;
}
if (vis[i] == timer || i == a) {
continue;
}
dfs(i, -1, a);
}
return f;
}
int le = -1, pre[1000005];
void dfscyc(int i, int p) {
if (le != -1) {
return;
}
if (vis[i] == timer) {
set<int> b;
pre[i] = p;
int a = i;
le = 0;
a = pre[a];
if (st.count(a)) {
if (calc(a)) {
b.insert(a);
}
}
while(a != i) {
a = pre[a];
if (st.count(a)) {
if (calc(a)) {
b.insert(a);
}
}
}
st = b;
return;
}
vis[i] = timer;
pre[i] = p;
for (int j : adj[i]) {
if (j == p) {
continue;
}
dfscyc(j, i);
}
}
void cycle(int a) {
timer++;
le = -1;
dfscyc(a, 0);
}
bool cyc = 1, cant = 0;
int s4 = -1;
void Link(int A, int B) {
adj[A].push_back(B);
adj[B].push_back(A);
if (cant || st.size() == 0) {
return;
}
if (find(A) == find(B)) {
cycle(A);
}
if (find(A) != find(B)) {
merge(A, B);
}
if (adj[A].size() >= 4 && s4 == -1) {
cyc = 0;
s4 = A;
if (st.count(A) && calc(A)) {
st = {A};
} else {
st = {};
}
}
if (adj[B].size() >= 4 && s4 == -1) {
cyc = 0;
s4 = B;
if (st.count(B) && calc(B)) {
st = {B};
} else {
st = {};
}
}
if (adj[A].size() >= 4 && s4 != -1 && s4 != A) {
st.clear();
cant = 1;
return;
}
if (adj[B].size() >= 4 && s4 != -1 && s4 != B) {
st.clear();
cant = 1;
return;
}
if (adj[A].size() == 3) {
set<int> b;
if (st.count(A)) {
if (calc(A)) {
b.insert(A);
}
}
for (int j : adj[A]) {
if (st.count(j)) {
if (calc(j)) {
b.insert(j);
}
}
}
st = b;
}
if (adj[B].size() == 3) {
set<int> b;
if (st.count(B)) {
if (calc(B)) {
b.insert(B);
}
}
for (int j : adj[B]) {
if (st.count(j)) {
if (calc(j)) {
b.insert(j);
}
}
}
st = b;
}
}
int CountCritical() {
return st.size();
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
10 ms |
24924 KB |
Output is correct |
2 |
Correct |
12 ms |
25472 KB |
Output is correct |
3 |
Correct |
11 ms |
25436 KB |
Output is correct |
4 |
Correct |
11 ms |
25180 KB |
Output is correct |
5 |
Correct |
71 ms |
25672 KB |
Output is correct |
6 |
Correct |
252 ms |
26200 KB |
Output is correct |
7 |
Correct |
11 ms |
25180 KB |
Output is correct |
8 |
Correct |
15 ms |
25432 KB |
Output is correct |
9 |
Correct |
13 ms |
25436 KB |
Output is correct |
10 |
Correct |
12 ms |
25524 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
326 ms |
69696 KB |
Output is correct |
2 |
Correct |
823 ms |
88716 KB |
Output is correct |
3 |
Correct |
627 ms |
87120 KB |
Output is correct |
4 |
Execution timed out |
4059 ms |
119524 KB |
Time limit exceeded |
5 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
10 ms |
24924 KB |
Output is correct |
2 |
Correct |
12 ms |
25472 KB |
Output is correct |
3 |
Correct |
11 ms |
25436 KB |
Output is correct |
4 |
Correct |
11 ms |
25180 KB |
Output is correct |
5 |
Correct |
71 ms |
25672 KB |
Output is correct |
6 |
Correct |
252 ms |
26200 KB |
Output is correct |
7 |
Correct |
11 ms |
25180 KB |
Output is correct |
8 |
Correct |
15 ms |
25432 KB |
Output is correct |
9 |
Correct |
13 ms |
25436 KB |
Output is correct |
10 |
Correct |
12 ms |
25524 KB |
Output is correct |
11 |
Correct |
12 ms |
25432 KB |
Output is correct |
12 |
Correct |
28 ms |
25948 KB |
Output is correct |
13 |
Correct |
16 ms |
25944 KB |
Output is correct |
14 |
Correct |
280 ms |
25764 KB |
Output is correct |
15 |
Correct |
745 ms |
26200 KB |
Output is correct |
16 |
Correct |
19 ms |
25948 KB |
Output is correct |
17 |
Correct |
17 ms |
25808 KB |
Output is correct |
18 |
Correct |
15 ms |
26460 KB |
Output is correct |
19 |
Correct |
92 ms |
26132 KB |
Output is correct |
20 |
Correct |
13 ms |
25948 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
10 ms |
24924 KB |
Output is correct |
2 |
Correct |
12 ms |
25472 KB |
Output is correct |
3 |
Correct |
11 ms |
25436 KB |
Output is correct |
4 |
Correct |
11 ms |
25180 KB |
Output is correct |
5 |
Correct |
71 ms |
25672 KB |
Output is correct |
6 |
Correct |
252 ms |
26200 KB |
Output is correct |
7 |
Correct |
11 ms |
25180 KB |
Output is correct |
8 |
Correct |
15 ms |
25432 KB |
Output is correct |
9 |
Correct |
13 ms |
25436 KB |
Output is correct |
10 |
Correct |
12 ms |
25524 KB |
Output is correct |
11 |
Correct |
12 ms |
25432 KB |
Output is correct |
12 |
Correct |
28 ms |
25948 KB |
Output is correct |
13 |
Correct |
16 ms |
25944 KB |
Output is correct |
14 |
Correct |
280 ms |
25764 KB |
Output is correct |
15 |
Correct |
745 ms |
26200 KB |
Output is correct |
16 |
Correct |
19 ms |
25948 KB |
Output is correct |
17 |
Correct |
17 ms |
25808 KB |
Output is correct |
18 |
Correct |
15 ms |
26460 KB |
Output is correct |
19 |
Correct |
92 ms |
26132 KB |
Output is correct |
20 |
Correct |
13 ms |
25948 KB |
Output is correct |
21 |
Correct |
26 ms |
28760 KB |
Output is correct |
22 |
Correct |
36 ms |
30960 KB |
Output is correct |
23 |
Correct |
45 ms |
32532 KB |
Output is correct |
24 |
Execution timed out |
4038 ms |
31304 KB |
Time limit exceeded |
25 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
10 ms |
24924 KB |
Output is correct |
2 |
Correct |
12 ms |
25472 KB |
Output is correct |
3 |
Correct |
11 ms |
25436 KB |
Output is correct |
4 |
Correct |
11 ms |
25180 KB |
Output is correct |
5 |
Correct |
71 ms |
25672 KB |
Output is correct |
6 |
Correct |
252 ms |
26200 KB |
Output is correct |
7 |
Correct |
11 ms |
25180 KB |
Output is correct |
8 |
Correct |
15 ms |
25432 KB |
Output is correct |
9 |
Correct |
13 ms |
25436 KB |
Output is correct |
10 |
Correct |
12 ms |
25524 KB |
Output is correct |
11 |
Correct |
326 ms |
69696 KB |
Output is correct |
12 |
Correct |
823 ms |
88716 KB |
Output is correct |
13 |
Correct |
627 ms |
87120 KB |
Output is correct |
14 |
Execution timed out |
4059 ms |
119524 KB |
Time limit exceeded |
15 |
Halted |
0 ms |
0 KB |
- |