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

题意简述

给你一个\(n\)个节点的无向图\(G=\{V,E\}\)的邻接矩阵\(g\)和每个点的点权为\(s_i\),且\(\sum_{i=1}^n s_i = K\),要你求出\(\mathrm{max} \{ \sum_{u,v \in E} s_u \times s_v\}\)

做法

设两个不相邻的点\(u\),\(v\)的点权为\(s_u\)和\(s_v\),令\(a_u = \sum_{g[u][i]=1} s_i, a_v=\sum_{g[v][i]=1} s_i\),此时这对点\((u,v)\)的贡献为\(a_us_u+a_vs_v\)。

  • 不妨设\(a_u\geq a_v\),若\(s_u=s_u+s_v,s_v=0\),\(ans\)并不会变小。

所以最优解一定包含选取一个团(完全图)。对于一个\(n\)个点的完全图,这个完全图的答案为\((\frac {K}{n})^2 \times \frac {n(n-1)}{2}\),所以本题的答案为\((\frac {K}{tot})^2 \times \frac {tot(tot-1)}{2}\),其中\(tot\)为最大团的大小。

我们采用\(Bron-Kerbosch\)算法来求最大团,采用dfs剪枝的方法,时间复杂度\(O\left( {1.14}^n \right)\)。



当然此题模拟退火也可以过,维护一个序列\({c_n}\),\(s_i=\frac {c_i}{\sum_j c_j}\)。对于序列进行随机的$\bmod $固定值(如\(100\))意义下的加减,如果更优则转移。

代码实现

#include<bits/stdc++.h>
using namespace std;
#define re register int
#define ll long long
#define ak *
#define in inline
#define db double
in char getch()
{
    static char buf[1<<12],*p1=buf,*p2=buf;
    return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<12,stdin),p1==p2)?EOF:*p1++;
}
char qwq;
#define gc() getchar()
in int read()
{
    re cz=0,ioi=1;qwq=gc();
    while(qwq<'0'||qwq>'9') ioi=qwq=='-'?~ioi+1:1,qwq=gc();
    while(qwq>='0'&&qwq<='9') cz=(cz<<3)+(cz<<1)+(qwq^48),qwq=gc();
    return cz ak ioi;
}
const int N=45;
int n,k,g[N][N],ans,cnt[N],ch[N];
bool dfs(re u,re nw)
{
    ch[nw]=u;
    if(nw>ans) return ans=nw,true;
    for(re i,v=u+1;v<=n;v++)
    {
        if(!g[u][v]||nw+cnt[v]<=ans) continue;
        for(i=1;i<=nw;i++)
        if(!g[ch[i]][v]) break;
        if(i>nw&&dfs(v,nw+1)) return true;
    }
    return false;
}
in int bron_kerbosch()
{
    for(re i=n;i;i--) dfs(i,1),cnt[i]=ans;
    return ans;
}
int main()
{
    n=read();k=read();
    for(re i=1;i<=n;i++)
    for(re j=1;j<=n;j++)
    g[i][j]=read();
    re cnt=bron_kerbosch();
    if(!cnt) return puts("0"),0;
    db per=1.0*k/cnt,tot=cnt*(cnt-1)/2.0;
    printf("%.8lf",tot*pow(per,2));
    return 0;
}

原文地址:https://www.cnblogs.com/disangan233/p/11143294.html

时间: 2024-11-11 13:47:50

CF839E Mother of Dragons 最大团 Bron-Kerbosch算法的相关文章

【CF839E】Mother of Dragons 折半状压

[CF839E]Mother of Dragons 题意:给你一张n个点,m条边的无向图.你有k点能量,你可以把能量分配到任意一些点上,每个点分到的能量可以是一个非负实数.定义总能量为:对于所有边<a,b>,a的能量*b的能量 的和.让你最大化总能量. $n\le 40,k\le 1000$ 题解:容易发现,最后的分配方案一定是给一个大小为cnt的完全子图中的每个点都分配$k\over cnt$点能量. 那么本题就变成了一般图最大团问题,可以用随机化搞定,这里给出一种meet in the m

poj 1419 (最大独立集)

基础知识: 最大独立集: 顶点集V中取 K个顶点,其两两间无连接. 最大团: 顶点集V中取 K个顶点,其两两间有边连接. 最大独立集 = 补图的最大团. (补图 = 完全图 - 原图) 挺详细的解释:http://www.cnblogs.com/yefeng1627/archive/2013/03/31/2991592.html 思路: 据说..求原图的最大独立集是NP问题,那么就可以通过求其补图中最大团中顶点数量,就可得出原图中最大独立集中顶点数量了. 附上优化后的模板: 1 #include

POJ1419 Graph Coloring(最大独立集)(最大团)

Graph Coloring Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4926   Accepted: 2289   Special Judge Description You are to write a program that tries to find an optimal coloring for a given graph. Colors are applied to the nodes of the

[美剧赏析] 权力的游戏&lt;Game of Thrones&gt;完全赏析 (49-50)

最近阿伟看多了五毛动画,突然想看看那些成熟的动画是怎样的,于是决定看几部美剧. GoT是阿伟选择的第一站,由于这部作品的亮点非常的多,所以会进行全面的解析,这已 经不单纯是剧透的级别了.所以如果诸位朋友没有完整的看过这部片,先去看一看吧. The Dance of Dragons - Look out! - Fire! Fire! A band of 20 men, maybe less. They were in and out before anyone spotted them. Burn

长春理工大学第十四届程序设计竞赛(重现赛)M.Orx Zone

链接:https://ac.nowcoder.com/acm/contest/912/M 题意: Daenerys Stormborn, 风暴中出生的丹尼莉丝,the Unburnt, 烧不死的,Queen of Meereen, 弥林女王,Queen of the Andals and the Rhoynar and the First Men, 安达尔人,罗伊那人,和先民的女王,Lord of the Seven Kingdoms, 七国之主,Protector of the Realm,

最大匹配、最小顶点覆盖、最大独立集、最小路径覆盖(转)

在讲述这两个算法之前,首先有几个概念需要明白: 二分图: 二分图又称二部图,是图论中的一种特殊模型.设G=(V,E)是一个无向图,如果顶点V可以分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A, j in B), 则称图G是二分图. 匹配: 给定一个二分图,在G的一个子图G'中,如果G'的边集中的任意两条边都不依附于同一个顶点,则称G'的边集为G的一个匹配 最大匹配: 在所有的匹配中,边数最多的那个匹配就是二分图的最大匹

基于请求的分布式互斥算法

一个悲剧的文章,研究的东西确实比较老,但是因为这些研究,让我对分布式的底层的关系有了更加清晰的认识,也算是不枉此功. 下面贴出来核心的部分. 引言 分布式系统中的一组进程可能会同时访问一个资源或者同时执行一个给定的函数,我们称这些资源或者函数为临界区(Critical Section),若不加控制的话,会造成资源或者环境的不一致的现象.保证任何给定时刻只允许一个进程或者给定的进程去执行临界区的算法称为互斥算法.互斥也可以称为并发控制. 这个问题最早由Dijkstra[1]在1965年提出.互斥可

PGM学习之五 贝叶斯网络

本文的主题是"贝叶斯网络"(Bayesian Network) 贝叶斯网络是一个典型的图模型,它对感兴趣变量(variables of interest)及变量之间的关系(relationships)进行建模.当将贝叶斯模型与统计技术一起使用时,这种图模型分析数据具有如下几个优势: (1)    贝叶斯学习能够方便的处理不完全数据.例如考虑具有相关关系的多个输入变量的分类或回归问题,对标准的监督学习算法而言,变量间的相关性并不是它们处理的关键因素,当这些变量中有某个缺值时,它们的预测结

求团使布其段十基达列

但就在这时前面有了动静只见一个团队的玩家正在练级徽记很明显赫然是永恒的玩家似乎是一个千人团正在清理月光森林空地上的狼群 嗯我看了看秦韵笑道谢谢了这次多亏了你帮忙不然我一个人肯定手忙脚乱了赤炎护手青铜器皮甲 Eh! certainly! Then take another cigarette, and I will tell you this 'Thousand and Second Night' romance.The Marchese arose and summoned his servan