博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2019牛客暑期多校训练营(第二场)- Kth Minimum Clique
阅读量:4953 次
发布时间:2019-06-11

本文共 1980 字,大约阅读时间需要 6 分钟。

优先队列bfs + 状态压缩

不难想到,最小团就是空集,我们可以向这个空集里加点,来找到k小团

具体做法就是用优先队列,把权值小的团出队,为了不重复加点,我们可以记录一下最后几个被加进团的点,这样下次直接从该点之后遍历,这样就可以把所有点都遍历一次了。

用bitset来保存点连接状态可以直接判断该点是否与团的每个点相连

#include 
#define INF 0x3f3f3f3f#define full(a, b) memset(a, b, sizeof a)#define FAST_IO ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)using namespace std;typedef long long LL;inline int lowbit(int x){ return x & (-x); }inline int read(){ int ret = 0, w = 0; char ch = 0; while(!isdigit(ch)){ w |= ch == '-', ch = getchar(); } while(isdigit(ch)){ ret = (ret << 3) + (ret << 1) + (ch ^ 48); ch = getchar(); } return w ? -ret : ret;}inline int lcm(int a, int b){ return a / __gcd(a, b) * b; }template
inline A fpow(A x, B p, C lyd){ A ans = 1; for(; p; p >>= 1, x = 1LL * x * x % lyd)if(p & 1)ans = 1LL * x * ans % lyd; return ans;}const int N = 200;int n, k, val[N];struct Node{ LL w; int s; bitset<105> clique; bool operator < (const Node &rhs) const { return w > rhs.w; } Node(){} Node(LL w, int s, bitset<105> clique): w(w), s(s), clique(clique){}};bitset<105> e[N];LL solve(){ priority_queue
pq; int cnt = 0; bitset<105> raw; raw.reset(); pq.push(Node(0, 0, raw)); while(!pq.empty()){ Node cur = pq.top(); pq.pop(); cnt ++; if(cnt == k) return cur.w; for(int i = cur.s + 1; i <= n; i ++){ if((e[i] & cur.clique) == cur.clique){ bitset<105> b(cur.clique); b.set(i, 1); pq.push(Node(cur.w + val[i], i, b)); } } } return -1;}int main(){ n = read(), k = read(); for(int i = 1; i <= n; i ++) val[i] = read(); string s; for(int i = 1; i <= n; i ++){ cin >> s; for(int j = 1; j <= n; j ++){ e[i].set(j, s[j - 1] - '0'); } } printf("%lld\n", solve()); return 0;}

转载于:https://www.cnblogs.com/onionQAQ/p/11222578.html

你可能感兴趣的文章
WPF自定义搜索框代码分享
查看>>
js 基础拓展
查看>>
SpringBoot访问html访问不了的问题
查看>>
{width=200px;height=300px;overflow:hidden}
查看>>
C#生成随机数
查看>>
CSS基础学习 20.CSS媒体查询
查看>>
2019春季第十一周作业
查看>>
洛谷P4591 [TJOI2018]碱基序列 【KMP + dp】
查看>>
iOS CoreData介绍和使用(以及一些注意事项)
查看>>
OS笔记047代理传值和block传值
查看>>
Android应用程序与SurfaceFlinger服务的连接过程分析
查看>>
coco2dx服务器简单例子
查看>>
Java回顾之多线程
查看>>
sqlite
查看>>
机电行业如何进行信息化建设
查看>>
Windows Azure Platform Introduction (4) Windows Azure架构
查看>>
【转】chrome developer tool 调试技巧
查看>>
mahout运行测试与kmeans算法解析
查看>>
互相给一巴掌器
查看>>
Android SDK环境变量配置
查看>>