10
10
* faster for sparse graphs.
11
11
* Status: fuzz-tested
12
12
*/
13
- typedef bitset < 200 > B ;
13
+ typedef vector < bitset < 200 >> vb ;
14
14
struct Maxclique {
15
15
double limit = 0.025 , pk = 0 ;
16
16
struct Vertex { int i , d = 0 ; };
17
17
typedef vector < Vertex > vv ;
18
- vector < B > e ;
18
+ vb e ;
19
19
vv V ;
20
20
vector < vi > C ;
21
21
vi qmax , q , S , old ;
22
- bool cut1 (int pi , vi & A ) {
23
- trav (i , A ) if (e [pi ][i ]) return true ;
24
- return false ;
25
- }
26
22
void init (vv & r ) {
27
23
trav (v ,r ) v .d = 0 ;
28
24
trav (v , r ) trav (j , r ) v .d += e [v .i ][j .i ];
@@ -44,7 +40,8 @@ struct Maxclique {
44
40
C [1 ].clear (), C [2 ].clear ();
45
41
trav (v , T ) {
46
42
int k = 1 ;
47
- while (cut1 (v .i , C [k ])) k ++ ;
43
+ auto f = [& ](int i ) { return e [v .i ][i ]; };
44
+ while (any_of (all (C [k ]), f )) k ++ ;
48
45
if (k > mxk ) mxk = k , C [mxk + 1 ].clear ();
49
46
if (k < mnk ) T [j ++ ].i = v .i ;
50
47
C [k ].push_back (v .i );
@@ -58,8 +55,7 @@ struct Maxclique {
58
55
}
59
56
}
60
57
vi maxClique () { init (V ), expand (V ); return qmax ; }
61
- Maxclique (vector < B > conn ) :
62
- e (conn ), C (sz (e ) + 1 ), S (sz (e )+ 1 ), old (S ) {
58
+ Maxclique (vb conn ) : e (conn ), C (sz (e )+ 1 ), S (sz (C )), old (S ) {
63
59
rep (i ,0 ,sz (e )) V .push_back ({i });
64
60
}
65
61
};
0 commit comments