#include <vector>
#include <stdio.h>
#include <queue>
using namespace std;
int N;
vector<int> edge[1000010];
bool check[1000010],flag;
int q[1000010],top,rear;
int jj;
void dfs2(int x,int par){
int i,v,cnt = 0;
check[x] = true;
for(i=0; i<edge[x].size(); i++){
v = edge[x][i];
if(v == par || v == jj) continue;
if(check[v]){ flag = false; continue; }
dfs2(v,x);
cnt++;
}
if(cnt >= 2) flag = false;
}
int checking(int x){
int i,t,v;
jj = x;
for(i=1; i<=N; i++) check[i] = false;
flag = true; check[jj] = true;
for(i=1; i<=N; i++){
if(!check[i]){
t = 0;
for(int k=0; k<edge[i].size(); k++){
v = edge[i][k];
if(v == jj) continue;
t++;
if(t == 3){
flag = false;
break;
}
dfs2(v,i);
}
}
if(!flag) break;
}
if(flag) return 1;
else return 0;
}
void Init(int N_) {
N = N_;
}
void Link(int A, int B) {
A++; B++;
edge[A].push_back(B);
edge[B].push_back(A);
}
int problem;
void dfs(int x,int par){
int i,v,cnt = 0;
check[x] = true;
for(i=0; i<edge[x].size(); i++){
v = edge[x][i];
if(v == par) continue;
if(check[v]){
flag = false;
if(problem == -1) problem = x;
continue;
}
dfs(v,x);
cnt++;
}
if(cnt >= 2){
flag = false;
if(problem == -1) problem = x;
}
}
int ischain(int x){
int i,t;
check[x] = true; t = 0; flag = true;
for(i=0; i<edge[x].size(); i++){
t++;
if(!check[edge[x][i]]) dfs(edge[x][i],x);
}
if(t >= 3){
flag = false;
}
if(flag) return 0; // chain
else return 1;
}
int CountCritical() {
int i,j,cnt,s,v;
int ans = 0;
cnt = 0;
for(i=1; i<=N; i++) check[i] = false;
for(i=1; i<=N; i++){
if(!check[i]){
if(ischain(i) == 1){
cnt++;
s = i;
}
}
}
if(cnt >= 2) return 0;
if(cnt == 0) return N;
for(i=1; i<=N; i++) check[i] = false;
cnt = edge[s].size();
if(cnt > 3){
ans += checking(s);
return ans;
}else if(cnt == 3){
ans += checking(s);
for(i=0; i<edge[s].size(); i++){
v = edge[s][i];
ans += checking(v);
}
return ans;
}else{
problem = -1;
i = ischain(s);
s = problem;
//printf("problem : %d\n",problem-1);
ans += checking(s);
if(edge[s].size() > 3) return ans;
for(i=0; i<edge[s].size(); i++){
v = edge[s][i];
ans += checking(v);
}
}
return ans;
}
Compilation message
rings.cpp: In function 'void dfs2(int, int)':
rings.cpp:17:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(i=0; i<edge[x].size(); i++){
~^~~~~~~~~~~~~~~
rings.cpp: In function 'int checking(int)':
rings.cpp:36:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int k=0; k<edge[i].size(); k++){
~^~~~~~~~~~~~~~~
rings.cpp: In function 'void dfs(int, int)':
rings.cpp:68:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(i=0; i<edge[x].size(); i++){
~^~~~~~~~~~~~~~~
rings.cpp: In function 'int ischain(int)':
rings.cpp:88:12: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(i=0; i<edge[x].size(); i++){
~^~~~~~~~~~~~~~~
rings.cpp: In function 'int CountCritical()':
rings.cpp:122:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(i=0; i<edge[s].size(); i++){
~^~~~~~~~~~~~~~~
rings.cpp:134:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(i=0; i<edge[s].size(); i++){
~^~~~~~~~~~~~~~~
rings.cpp:100:8: warning: unused variable 'j' [-Wunused-variable]
int i,j,cnt,s,v;
^
rings.cpp:129:5: warning: 's' may be used uninitialized in this function [-Wmaybe-uninitialized]
i = ischain(s);
~~^~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
24 ms |
23800 KB |
Output is correct |
2 |
Correct |
31 ms |
23924 KB |
Output is correct |
3 |
Correct |
24 ms |
24084 KB |
Output is correct |
4 |
Incorrect |
23 ms |
24084 KB |
Output isn't correct |
5 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
521 ms |
40988 KB |
Output is correct |
2 |
Correct |
1174 ms |
50236 KB |
Output is correct |
3 |
Correct |
1149 ms |
63080 KB |
Output is correct |
4 |
Incorrect |
2031 ms |
63080 KB |
Output isn't correct |
5 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
24 ms |
23800 KB |
Output is correct |
2 |
Correct |
31 ms |
23924 KB |
Output is correct |
3 |
Correct |
24 ms |
24084 KB |
Output is correct |
4 |
Incorrect |
23 ms |
24084 KB |
Output isn't correct |
5 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
24 ms |
23800 KB |
Output is correct |
2 |
Correct |
31 ms |
23924 KB |
Output is correct |
3 |
Correct |
24 ms |
24084 KB |
Output is correct |
4 |
Incorrect |
23 ms |
24084 KB |
Output isn't correct |
5 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
24 ms |
23800 KB |
Output is correct |
2 |
Correct |
31 ms |
23924 KB |
Output is correct |
3 |
Correct |
24 ms |
24084 KB |
Output is correct |
4 |
Incorrect |
23 ms |
24084 KB |
Output isn't correct |
5 |
Halted |
0 ms |
0 KB |
- |