Kth Minimum Clique
Kth Minimum Clique
题目描述
A subset of vertices of an undirected graph is called clique if and only if every two distinct vertices in the subset are adjacent. The weight of a clique is the summation of the weight of vertices in it.
输入描述:
The first line of input contains two space-separated integers N, K.
The second line of input contains N space-separated integers wi representing the weight of each vertex.
Following N lines each contains N characters eij. There's an edge between vertex i and vertex j if and only if eij="1". 1≤N≤100
1≤K≤1e6
0≤wi≤1e9
eij∈"01"
eii="0"
eij=eji
输出描述:
Output one line containing an integer representing the answer. If there's less than K cliques, output "-1".
输入
2 3
1 2
01
10
输出
2
说明
An empty set is considered as a clique.
题目链接:https://ac.nowcoder.com/acm/contest/882/D
题意:找到权值第K小的完全子图。
思路:考虑一开始我们所选择的子图是个空集,然后逐步向里面加点。这样加点的方式会导致每一次从当前状态,都会产生多个下一状态(比如当前是空集,我们可以把任意一个点加进去,就会有n种状态),那么若是我们可以找到一种方式,使得我们可以按照状态的权值递增的顺序来遍历这些状态,那么遍历到第K个状态时就是答案。于是我们可以用优先队列来实现这种遍历方式,即优先队列每次将当前已拓展的所有状态中,权值最小的那个拿来去拓展其他状态。但是还一个小问题就是我们要保证我们拓展的状态不能重复也不能遗漏,于是只要每次在当前状态的已选中的点中下标最大的点后面拓展,就可以保证不重复不遗漏了。
#include<bits/stdc++.h>
using namespace std;
int w[];
bitset<>Map[];
char M[][]; struct ss
{
bitset<>state;
long long w; bool operator < (const ss & s)const
{
return w>s.w;
}
}; priority_queue<ss>q;
int n,k;
long long spfa(ss now)
{
q.push(now); while(!q.empty())
{
now=q.top();
q.pop();
k--; if(!k)
return now.w; int pos=;
for(int i=;i<n;i++)if(now.state[i])pos=i+; for(int i=pos; i<n; i++)
{
if(now.state[i]==)
{
if((now.state&Map[i])==now.state)//O(1)拓展新状态
{
now.state[i]=;
now.w+=w[i];
q.push(now);
now.state[i]=;
now.w-=w[i];
}
}
}
}
return -;
} int main()
{
scanf("%d %d",&n,&k); for(int i=; i<n; i++)
scanf("%d",&w[i]);
for(int i=; i<n; i++)
scanf("%s",M[i]); for(int i=; i<n; i++)
for(int j=; j<n; j++)
if(M[i][j]=='')Map[i].set(j); ss now;
now.state.reset();
now.w=; printf("%lld\n",spfa(now));
return ;
}
Kth Minimum Clique的更多相关文章
- 牛客竞赛第二场D Kth Minimum Clique 贪心+bitmap
Kth Minimum Clique 题意 给出n(n<100)个点的邻接表,和n个点的权值,求第k大的团(完全子图) 分析 n很小,并且好像没有什么算法和这个有关系,所以可以往暴力枚举的方向想 ...
- 牛客网多校训练第二场D Kth Minimum Clique
链接:https://ac.nowcoder.com/acm/contest/882/D来源:牛客网 Given a vertex-weighted graph with N vertices, fi ...
- 第k小团(Bitset+bfs)牛客第二场 -- Kth Minimum Clique
题意: 给你n个点的权值和连边的信息,问你第k小团的值是多少. 思路: 用bitset存信息,暴力跑一下就行了,因为满足树形结构,所以bfs+优先队列就ok了,其中记录下最后进入的点(以免重复跑). ...
- Kth Minimum Clique(2019年牛客多校第二场D题+k小团+bitset)
目录 题目链接 题意 思路 代码 题目链接 传送门 题意 找第\(k\)小团. 思路 用\(bitset\)来标记每个结点与哪些结点直接有边,然后进行\(bfs\),在判断新加入的点与现在有的点是否都 ...
- 【bitset】Kth Minimum Clique
#include<bits/stdc++.h> #define B bitset<105> using namespace std; typedef long long ll ...
- 2019牛客暑期多校训练营(第二场)-D Kth Minimum Clique
题目链接:https://ac.nowcoder.com/acm/contest/882/D 题意:求给定点权无向图中,点权和第k小的完全子图的点权和.(包括空集) 思路:从空集开始,每找到一个完全子 ...
- 2019牛客暑期多校训练营(第二场)D Kth Minimum Clique(第k团)
题意:给你n个点 求第k小的团 思路:暴力bfs+bitset压位 #include <bits/stdc++.h> using namespace std; const int N = ...
- 2019牛客多校第二场D-Kth Minimum Clique
Kth Minimum Clique 题目传送门 解题思路 我们可以从没有点开始,把点一个一个放进去,先把放入一个点的情况都存进按照权值排序的优先队列,每次在新出队的集合里增加一个新的点,为了避免重复 ...
- Kth Minimum Clique_2019牛客暑期多校训练营(第二场)
题目连接: https://ac.nowcoder.com/acm/contest/882/D Description Given a vertex-weighted graph with N ver ...
随机推荐
- Windows Server 2008 R2 部署服务
Windows Server 2008 R2 部署服务 部分参考: Windows Server 2008 R2 部署服务 - 马睿的技术博客 - 51CTO技术博客http://marui.blog ...
- iOS之UIButton的normal和selected状态切换
1.问题? 改变播放器按钮状态,发现从selected切回到normal状态时候,中间会切换normal-selected-normal的图片? 2.原因…… normal-->selected ...
- php析构函数小结
l 基本语法 class 类名{ public function __destruct(){ //函数体 //析构函数的最重要的作用,就是释放对象创建的资源 //比如 数据库连接, 文件句柄, ...
- RESTful API -- rules
RESTful介绍 REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”或“表现层状态转化”. 推荐 ...
- Vue报错——Unknown custom element: <shop-slide> - did you register the component correctly?
参考: https://blog.csdn.net/jiangyu1013/article/details/85676292 解决:除了import组件外,还要在components中添加 <t ...
- 6.Spring【AOP】XML方式
1.AOP术语 1. Joinpoint(连接点):所谓连接点是指那些被拦截到的点.在spring中,这些点指的是方法,因为spring只支持方法类型的连接点 2. Pointcut(切入点):所谓切 ...
- MYSQL错误代码和消息
服务器错误信息来自下述源文件: · 错误消息信息列在share/errmsg.txt文件中.“%d”和“%s”分别代表编号和字符串,显示时,它们将被消息值取代. · 错 ...
- JDK中有关23个经典设计模式的示例
Creational patterns Abstract factory (recognizeable by creational methods returning an abstract/inte ...
- css3新特性概览
一.特性 1.强大的选择器 2.半透明度效果的实现 3.多栏布局 4.多背景图 css3允许背景属性设置多个属性值,如:background-image,background-repeat,backg ...
- 入门servlet:request获取请求头数据
@WebServlet("/RequestDemo2") public class RequestDemo2 extends HttpServlet { protected voi ...