Codeforces 839E Mother of Dragons(极大团)
【题目链接】 http://codeforces.com/contest/839/problem/E
【题目大意】
现在有一些点,现在你有k的液体,随意分配给这些点,
当两个点有边相连的时候,他们能产生分配的液体乘积之和的价值,问最大价值
【题解】
考虑相同液体分给两个相连的点的时候,根据不等式x+y<=2sqrt(xy)的取等条件,
一定是平均分的时候价值最大,考虑多个相连,完全图的时候产生价值更大,
因此答案一定是一个极大团,记团大小为ans,Ans=ans*(ans-1)/2*sqr(k/ans)
答案取决于(ans-1)/ans的大小,根据盐水加盐性质,答案正比于ans的大小,
所以求最大的极大团,也就是最大团用来计算答案是最优的。
【代码】
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
namespace BronKerbosch{
const int N=200;
int G[N][N],Allow[N][N],Forbid[N][N],Num[N][N],Ans;
void Initialize(int n){
Ans=0;
for(int i=1;i<=n;i++)Allow[1][i]=i;
memset(G,0,sizeof(G));
}
void Add_Edge(int x,int y){G[x][y]=G[y][x]=1;}
void Dfs(int x,int Nn,int An,int Fn){
if(!An&&!Fn){Ans=max(Ans,Nn);return;}
if(!An)return;
int key=Allow[x][1];
for(int j=1;j<=An;j++){
int v=Allow[x][j],tAn=0,tFn=0;
if(G[key][v])continue;
for(int i=1;i<=Nn;i++)Num[x+1][i]=Num[x][1]; Num[x+1][Nn+1]=v;
for(int i=1;i<=An;i++)if(G[v][Allow[x][i]])Allow[x+1][++tAn]=Allow[x][i];
for(int i=1;i<=Fn;i++)if(G[v][Forbid[x][i]])Forbid[x+1][++tFn]=Forbid[x][i];
Dfs(x+1,Nn+1,tAn,tFn);
Allow[x][j]=0; Forbid[x][++Fn]=v;
}
}
}
int n,K,x,y;
int main(){
while(~scanf("%d%d",&n,&K)){
using namespace BronKerbosch;
Initialize(n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%d",&x);
if(x&&i!=j)Add_Edge(i,j);
}
}Dfs(1,0,n,0);
double res=0;
if(Ans>1)res=1.0*(Ans-1)/2.0/Ans;
printf("%.10f\n",res*K*K);
}return 0;
}
Codeforces 839E Mother of Dragons(极大团)的更多相关文章
- Codeforces 839E Mother of Dragons【__builtin_popcount()的使用】
E. Mother of Dragons time limit per test:2 seconds memory limit per test:256 megabytes input:standar ...
- Codeforces 839E Mother of Dragons
题 OvO http://codeforces.com/contest/839/problem/E (Codeforces Round #428 (Div. 2) - E) 解 首先,k肯定是要平均分 ...
- CF839E Mother of Dragons 最大团 Bron-Kerbosch算法
题意简述 给你一个\(n\)个节点的无向图\(G=\{V,E\}\)的邻接矩阵\(g\)和每个点的点权为\(s_i\),且\(\sum_{i=1}^n s_i = K\),要你求出\(\mathrm{ ...
- 【CF839E】Mother of Dragons 折半状压
[CF839E]Mother of Dragons 题意:给你一张n个点,m条边的无向图.你有k点能量,你可以把能量分配到任意一些点上,每个点分到的能量可以是一个非负实数.定义总能量为:对于所有边&l ...
- POJ 2989 All Friends 极大团计数
POJ 2989 题意:给定一个无向图(节点数小于128)求极大团(不包含在更大的团中)的总数. 对最大团,极大团不熟悉的,建议先阅读最大团搜索问题 ZOJ 1492 再来看本题. 本题数据有限,可以 ...
- All Friends 极大团
搞懂了什么是团 什么是极大团 什么是最大团 极大团就是 不是任何团的真子集 最大团就是点数最多的极大团 这题就是求极大团的个数 用bk算法 #include <iostream> ...
- hdoj1373 Channel Allocation(极大团)
题意是有若干个接收器,给出每个接收器的相邻接收器.相邻的接收器不能使用同一信号频道.问所需要的信号频道数. 求该无向图的极大团. #include<iostream> #include&l ...
- Codeforces Round #428 (Div. 2)E. Mother of Dragons
http://codeforces.com/contest/839/problem/E 最大团裸题= =,用Bron–Kerbosch算法,复杂度大多博客上没有,维基上查了查大约是O(3n/3) 最大 ...
- codeforces527D
Clique Problem CodeForces - 527D 所谓图的极大团是指在一个无向图中找到最多的点,使得这些点构成的图(即导出子图)是一个完全图,然而这个问题至今没有有效的多项式解法,当然 ...
随机推荐
- 【leetcode 简单】第三十四题 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入: [ ...
- html 中的列表
html 中列表可以分为 1. 无序列表(ul--li 的形式) 2. 有序列表(ol li的形式) 3. 定义列表(dl 的形式) 下面来看几种列表的具体内容: 1.无序列表. 无序列表的格式 ...
- div遮罩实现禁用鼠标(click、hover等)事件
这两天在帮老师做网页,今天想实现在一块区域内禁止鼠标的各种事件,本来是想在框架模板的js文件里去修改,但是改代码的时候有点凌乱...感觉应该自己把问题想复杂了. 所以想了想要是能实现在一个区域内(如: ...
- 学习webpack
前言 webpack前端工程中扮演的角色越来越重要,它也是前端工程化很重要的一环.本文将和大家一起按照项目流程学习使用wbepack,妈妈再也不用担心我不会使用webpack,哪里不会看哪里.这是一个 ...
- 黑色的企业网站后台管理模板html源码
链接:http://pan.baidu.com/s/1kUMqDU3 密码:83xt
- Vue-Module
由于使用单一状态树,应用的所有状态会集中到一个比较大的对象.当应用变得非常复杂时,store 对象就有可能变得相当臃肿. 为了解决以上问题,Vuex 允许我们将 store 分割成模块(module) ...
- 64_r1
R-3.4.0-2.fc26.x86_64.rpm 15-May-2017 14:49 31030 R-ALL-1.6.0-4.fc26.noarch.rpm 17-Feb-2017 22:05 11 ...
- 《深入理解Java虚拟机》笔记--第十三章、线程安全与锁优化
先保证并发的正确性,然后在此基础上来实现高效. 线程安全: 当多个线程访问一个对象时,如果不考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操 ...
- SSD回归类物体检测
本宝宝最近心情不会,反正这篇也是搬用别人博客的了:(SSD就是YOLO+anchor(不同feature map 作为input)) 引言 这篇文章是在YOLO[1]之后的一篇文章,这篇文章目前是一篇 ...
- java基础14 多态(及关键字:instanceof)
面向对象的三大特征: 1.封装 (将一类属性封装起来,并提供set()和get()方法给其他对象设置和获取值.或者是将一个运算方法封装起来,其他对象需要此种做运算时,给此对象调用) 2.继承 ...