【bitset】Kth Minimum Clique

 1 #include<bits/stdc++.h>
 2 #define B bitset<105>
 3 using namespace std;
 4 typedef long long ll ;
 5 const int N = 105 ;
 6 B G[N] ;
 7 ll a[N] ;
 8 typedef struct Node {
 9     B mask;
10     ll val;
11     Node() {}
12     Node( B b,ll v):mask(b),val(v){}
13     bool operator < (const Node & rhs )const {
14         return val > rhs.val ;
15     }
16 }Node ;
17 int main()
18 {
19     int n,k;
20     while(~scanf("%d%d",&n,&k)){
21         for(int i=1;i<=n;i++){
22             scanf("%lld",&a[i]);
23         }
24         for(int i=1;i<=n;i++){
25             G[i].reset();
26             for(int j=1,x;j<=n;j++){
27                 scanf("%1d",&x);
28                 G[i][j] = x ;
29             }
30         }
31         priority_queue < Node > Q ;
32         B tmp ;
33         tmp.reset();
34         Q.push( Node(tmp,0) );
35         while( !Q.empty() ){
36             Node cur = Q.top() ;
37             Q.pop();
38             if( !(--k) ){
39                 return 0*printf("%lld
",cur.val );
40             }
41             int pos = 1 ;
42             for(int i=1;i<=n;i++){
43                 if(cur.mask[i]){
44                     pos = i+1 ;
45                 }
46             }
47             for(int i=pos;i<=n;i++){
48                 if( ( G[i] & cur.mask ) == cur.mask ){
49                     cur.mask[i] = 1 ;
50                     Q.push( Node(cur.mask,cur.val +a[i]) );
51                     cur.mask[i] = 0 ;
52                 }
53             }
54         }
55         puts("-1");
56     }
57     return 0;
58 }
View Code
原文地址:https://www.cnblogs.com/Osea/p/11228519.html