-
Notifications
You must be signed in to change notification settings - Fork 2
/
10004.cpp
85 lines (69 loc) · 1.2 KB
/
10004.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include<stdio.h>
#include<string.h>
#define MAXN 202
char Link[MAXN][MAXN];
int N, E;
struct SS {
char color;
}V[MAXN];
int Q[MAXN], QH, QT;
void Push(int n) {
Q[QH++] = n;
QH %= MAXN;
}
int Pop() {
int n = Q[QT++];
QT %= MAXN;
return n;
}
int IsEmpty() {
return QH == QT;
}
int BFS(int s) {
int i, j, u;
char co;
V[s].color = 'w';
QH = QT = 0;
Push(s);
while(!IsEmpty()) {
u = Pop();
co = 'w';
if(V[u].color == 'w')
co = 'b';
for(i = 0; i<N; i++) {
if(Link[i][u] ==1) {
if(V[i].color == 'g') {
V[i].color = co;
Link[i][u] = Link[u][i] = 0;
Push(i);
}
else if(V[i].color == V[u].color) return 0;
}
}
}
return 1;
}
void Cal(int s) {
int i, j;
for(i = 0; i<=N; i++)
V[i].color = 'g';
if(BFS(s)) printf("BICOLORABLE.\n");
else printf("NOT BICOLORABLE.\n");
}
int main() {
int i, a, b, s;
while(1) {
scanf("%d",&N);
if(!N) break;
scanf("%d",&E);
for(i = 0; i<E; i++) {
scanf("%d%d",&a, &b);
Link[a][b] = Link[b][a] = 1;
s = a;
}
Cal(s);
for(i = 0; i<MAXN; i++)
memset(Link[i],0,sizeof(char) * 201);
}
return 0;
}