【CF839E】Mother of Dragons

题意:给你一张n个点,m条边的无向图。你有k点能量,你可以把能量分配到任意一些点上,每个点分到的能量可以是一个非负实数。定义总能量为:对于所有边<a,b>,a的能量*b的能量 的和。让你最大化总能量。

$n\le 40,k\le 1000$

题解:容易发现,最后的分配方案一定是给一个大小为cnt的完全子图中的每个点都分配$k\over cnt$点能量。

那么本题就变成了一般图最大团问题,可以用随机化搞定,这里给出一种meet in the middle算法。

对于前一半的点,用状压预处理出f[S]表示S中的最大团是什么。对于后一半的点,我们可以枚举其中的所有最大团,然后把与这些点都相邻的前一半的点拿出来,用前一半点的f值+后一半点的团大小更新答案即可。

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
typedef long long ll;
int n,m,n1,n2;
double k;
const int N=(1<<20)+4;
ll v[50];
int f1[N],Log[N],g[N],f2[N],cnt[N];
int main()
{
scanf("%d%lf",&n,&k);
int i,j,a;
for(i=0;i<n;i++) for(j=0;j<n;j++)
{
scanf("%d",&a);
if(a) v[i]|=1ll<<j,v[j]|=1ll<<i;
}
n1=n/2,n2=n-n/2;
for(i=0;i<n2;i++) Log[1<<i]=i;
for(i=1;i<(1<<n1);i++)
{
a=Log[i&-i];
f1[i]=max(f1[i^(1<<a)],f1[i&v[a]]+1);
}
m=f1[(1<<n1)-1];
g[0]=1,f2[0]=(1<<n1)-1;
for(i=1;i<(1<<n2);i++)
{
a=Log[i&-i];
f2[i]=f2[i^(1<<a)]&v[a+n1],cnt[i]=cnt[i^(1<<a)]+1;
if(g[i^(1<<a)]&&(((v[a+n1]>>n1)&i)==(i^(1<<a)))) g[i]=1,m=max(m,f1[f2[i]]+cnt[i]);
}
printf("%.10f",k*k*(m-1.0)/m/2.0);
return 0;
}

【CF839E】Mother of Dragons 折半状压的更多相关文章

  1. CF839E Mother of Dragons 最大团 Bron-Kerbosch算法

    题意简述 给你一个\(n\)个节点的无向图\(G=\{V,E\}\)的邻接矩阵\(g\)和每个点的点权为\(s_i\),且\(\sum_{i=1}^n s_i = K\),要你求出\(\mathrm{ ...

  2. JZYZOJ1530 [haoi2013]开关控制 状压 dfs 折半搜索

    http://172.20.6.3/Problem_Show.asp?id=1530 元宵节快要到了,某城市人民公园将举办一次灯展.Dr.Kong准备设计出一个奇妙的展品,他计划将编号为1到N的N(1 ...

  3. Codeforces Round #297 (Div. 2) [ 折半 + 三进制状压 + map ]

    传送门 E. Anya and Cubes time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  4. 2018宁夏邀请赛K题Vertex Covers(高维前缀和 状压 折半

    https://vjudge.net/problem/Gym-102222K 题意:给定N点M边的无向图,每个点有点权.  点覆盖表示某个点集S{}覆盖了所有的边,其贡献是S中点权之积. 现在让你求所 ...

  5. [NOIP10.4模拟赛]2.y题解--折半搜索+状压计数

    题目链接: 咕 闲扯: 这题暴力分似乎挺多,但是一些奇奇怪怪的细节没注意RE了,还是太菜了 分析: 首先我们考虑最naiive的状压DP ,\(f[u][v][state]\)表示u开头,v结尾是否存 ...

  6. 简单状压dp的思考 - 最大独立集问题和最大团问题 - 贰

    接着上文 题目链接:最大独立集问题 上次说到,一种用状压DP解决任意无向图最大团问题(MCP)的方程是: 注:此处popcountmax代表按照二进制位下1的个数作为关键字比较,即选择二进制位下1的个 ...

  7. BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3336  Solved: 1936[Submit][ ...

  8. 【BZOJ-4197】寿司晚宴 状压DP

    4197: [Noi2015]寿司晚宴 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 694  Solved: 440[Submit][Status] ...

  9. nefu1109 游戏争霸赛(状压dp)

    题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...

随机推荐

  1. Android学习笔记——Intents 和 Intent Filters(二)

    本人邮箱:JohnTsai.Work@gmail.com,欢迎交流讨论. 欢迎转载,转载请注明网址:http://www.cnblogs.com/JohnTsai/p/3993488.html 知识点 ...

  2. js堆栈与队列简单记忆

    在面向对象的程序设计里,一般都提供了实现队列(queue)和堆栈(stack)的方法,而对于JS来说,我们可以实现数组的相关操作,来实现队列和堆栈的功能,看下面的相关介绍. 一 看一下它们的性质,这种 ...

  3. NSIS 资料

    官方 http://nsis.sourceforge.net/Main_Page NSIS官方插件全集 http://az.eliang.com/aq_2013041703.html NSIS 衿华客 ...

  4. ABBYY FineReader 12中的用户模式你会用吗

    在ABBYY FineReader 12OCR文字识别软件中,有一个概念叫“训练”,它是在字符图像和字符本身之间建立对应关系的过程,训练模式可以提高含有装饰字体的文档或包含特殊字符(例如数学符号)文档 ...

  5. C++ 使用vector时遇到的一个问题

    我在测试程序中定义一个存储三维点的结构体,并定义该结构体的vector,当我在向vector插入元素时,编译一直提示错误: 代码片段如下:  C++ Code  1234567891011121314 ...

  6. 安装MySQL后经常弹出taskeng.exe~

    taskeng.exe,是Microsoft任务计划程序引擎调用的安全进程.文件路径为C:\Windows\system32\taskeng.exe.大小165KB. 解决办法:  这个问题是Wind ...

  7. 【转】细谈Redis和Memcached的区别

    Redis的作者Salvatore Sanfilippo曾经对这两种基于内存的数据存储系统进行过比较: Redis支持服务器端的数据操作:Redis相比Memcached来说,拥有更多的数据结构和并支 ...

  8. python qq邮箱发送邮件

    使用qq发送邮件 # coding=utf8 """ qq邮箱发送邮件 """ import sys reload(sys) sys.set ...

  9. MTK 强制横屏

    frameworks\base\policy\src\com\android\internal\policy\impl目录下的PhoneWindowManager.java的rotationForOr ...

  10. ECharts 3 -- gauge表盘的配置项

    绘制一个简单的表盘图表 在绘图前我们需要为 ECharts 准备一个具备高宽的 DOM 容器. <body> <!-- 为 ECharts 准备一个具备大小(宽高)的 DOM --& ...