模拟bfs,以空团为起点,用堆维护当前最小的团,然后进行加点更新

在加入新点时要注意判重,并且用bitset来加速判断和转移构造

  1. #include<bits/stdc++.h>
  2. #include<bitset>
  3. #include<queue>
  4. using namespace std;
  5. #define ll long long
  6. char mp[][];
  7. int n,k;
  8. ll a[];
  9. bitset<>bit[];
  10. struct Node{
  11. ll w;
  12. bitset<>b;//团内点的状态
  13. Node(){w=;b.reset();}
  14. Node(ll w,bitset<>b):w(w),b(b){}
  15. };
  16. bool operator<(Node a,Node b){
  17. return a.w>b.w;
  18. }
  19. priority_queue<Node> pq;//团按权值升序排列
  20.  
  21. int main(){
  22. cin>>n>>k;
  23. for(int i=;i<=n;i++)scanf("%lld",&a[i]);
  24. for(int i=;i<=n;i++)scanf("%s",mp[i]+);
  25. for(int i=;i<=n;i++)
  26. for(int j=;j<=n;j++){
  27. if(mp[i][j]=='')bit[i][j]=;
  28. else bit[i][j]=;
  29. }
  30. pq.push(Node());
  31. int cnt=;ll ans=;
  32. while(pq.size()){
  33. Node cur=pq.top();pq.pop();
  34. //for(int i=1;i<=n;i++)cout<<cur.b[i];
  35. //puts("");
  36.  
  37. cnt++;
  38. if(cnt==k){
  39. ans=cur.w;
  40. break;
  41. }
  42. //要保证所有在pq里出现过的团都是唯一的,即不能重复加入状态相同的团,
  43. //更新时只加比当前团最大的点编号大的点
  44. int start=;
  45. for(int i=n;i>=;i--)if(cur.b[i]){
  46. start=i+;break;
  47. }
  48.  
  49. for(int i=start;i<=n;i++)if(!cur.b[i]){//第i个点没在团里
  50. //for(int j=1;j<=n;j++)cout<<bit[i][j];
  51. //puts("");
  52. if((cur.b&bit[i])==cur.b){
  53. Node tmp=cur;
  54. tmp.w+=a[i];
  55. tmp.b[i]=;
  56. pq.push(tmp);
  57. }
  58. }
  59. }
  60.  
  61. if(cnt==k)cout<<ans<<endl;
  62. else cout<<-<<endl;
  63. }

第k小团+bitset优化——牛客多校第2场D的更多相关文章

  1. 2020牛客多校第八场K题

    __int128(例题:2020牛客多校第八场K题) 题意: 有n道菜,第i道菜的利润为\(a_i\),且有\(b_i\)盘.你要按照下列要求给顾客上菜. 1.每位顾客至少有一道菜 2.给顾客上菜时, ...

  2. 2019牛客多校第八场 F题 Flowers 计算几何+线段树

    2019牛客多校第八场 F题 Flowers 先枚举出三角形内部的点D. 下面所说的旋转没有指明逆时针还是顺时针则是指逆时针旋转. 固定内部点的答案的获取 anti(A)anti(A)anti(A)或 ...

  3. 牛客多校第三场 F Planting Trees

    牛客多校第三场 F Planting Trees 题意: 求矩阵内最大值减最小值大于k的最大子矩阵的面积 题解: 矩阵压缩的技巧 因为对于我们有用的信息只有这个矩阵内的最大值和最小值 所以我们可以将一 ...

  4. 牛客多校第四场sequence C (线段树+单调栈)

    牛客多校第四场sequence C (线段树+单调栈) 传送门:https://ac.nowcoder.com/acm/contest/884/C 题意: 求一个$\max {1 \leq l \le ...

  5. 牛客多校第3场 J 思维+树状数组+二分

    牛客多校第3场 J 思维+树状数组+二分 传送门:https://ac.nowcoder.com/acm/contest/883/J 题意: 给你q个询问,和一个队列容量f 询问有两种操作: 0.访问 ...

  6. 牛客多校第三场 G Removing Stones(分治+线段树)

    牛客多校第三场 G Removing Stones(分治+线段树) 题意: 给你n个数,问你有多少个长度不小于2的连续子序列,使得其中最大元素不大于所有元素和的一半 题解: 分治+线段树 线段树维护最 ...

  7. Kth Minimum Clique(2019年牛客多校第二场D题+k小团+bitset)

    目录 题目链接 题意 思路 代码 题目链接 传送门 题意 找第\(k\)小团. 思路 用\(bitset\)来标记每个结点与哪些结点直接有边,然后进行\(bfs\),在判断新加入的点与现在有的点是否都 ...

  8. 牛客多校第七场 C Bit Compression 思维

    链接:https://www.nowcoder.com/acm/contest/145/C来源:牛客网 A binary string s of length N = 2n is given. You ...

  9. 牛客多校第五场 F take

    链接:https://www.nowcoder.com/acm/contest/143/F来源:牛客网 题目描述 Kanade has n boxes , the i-th box has p[i] ...

随机推荐

  1. Java中的List集合

    List集合继承自collection接口,他自己也是个接口,没有具体的结构,与Set集合不同,List集合允许重复的元素. List集合特有方法:(Collection中没有这些) 这些在Arral ...

  2. Java中基本类型的包装类

    基本类型包装类: 项目中我们常常放弃基本类型,用基本类型的包装类 基本类型包装类有哪些: Int--Integer char--Character double--Double 以Intger为例讲述 ...

  3. php手册的一些思考

    函数手册一定要认真看,很多用法都不太清楚:   array array_merge ( array $array1 [, array $... ] ) array_merge() 将一个或多个数组的单 ...

  4. NX二次开发-使用MFC对话框不能用UF_UI_select等函数解决方法

    VC/MFC调用UG Dialog要进入加锁状态 加锁 UF_UI_lock_ug_access ( UF_UI_FROM_CUSTOM ); 此处为UF_UI_select的函数 解锁 UF_UI_ ...

  5. Linux串口驱动程序(3)-打开设备

    先来分析一下串口打开的过程: 1.用户调用open函数打开串口设备文件:2.在内核中通过tty子系统,把open操作层层传递到串口驱动程序中:3.在串口驱动程序中的xx_open最终实现这个操作.这里 ...

  6. C语言新手写扫雷攻略1

    工欲善其事,必先利其器,首先要准备好开发环境,既然是C语言,那就不是WinAPI的扫雷,就是纯的C语言开发,但是以前的C都是TC开发的,现在用肯定是过时很久了,但是也是有解决办法的,某些大神开发出Ea ...

  7. PAT_A1103#Integer Factorization

    Source: PAT A1103 Integer Factorization (30 分) Description: The K−P factorization of a positive inte ...

  8. iptables默认规则

    iptables默认规则 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [34:4104] -A INPUT -m ...

  9. 2019年Pandas官方用户调研

    import pandas as pd import seaborn as sns import matplotlib.pyplot as plt %matplotlib inline plt.rcP ...

  10. json传参报错

    restful接口报错: com.fasterxml.jackson.core.JsonParseException: Unexpected character ('e' (code 101)): w ...