Codeforces 839E :Mother of Dragons(Bron–Kerbosch算法)

传送门

题解:
先猜结论:最后一定是均分最大团。

然后就是板了。。

#include <bits/stdc++.h>
#define rd(x) scanf("%d",&x)
#define LD long double
using namespace std;

const int N=42;
int n,k,mx;
int nv[N][N],Some[N][N],None[N][N];

inline void dfs(int st,int all,int sc,int nc) {
    if(!sc) {if(!nc)mx=max(mx,all); return;}
    int u=Some[st][1];
    for(int e=1;e<=sc;e++) {
        int v=Some[st][e];
        if(nv[u][v]) continue;
        int nsc=0,nnc=0;
        for(int i=1;i<e;i++) if(nv[u][Some[st][i]] && nv[v][Some[st][i]]) Some[st+1][++nsc]=Some[st][i];
        for(int i=e+1;i<=sc;i++) if(nv[v][Some[st][i]]) Some[st+1][++nsc]=Some[st][i];
        for(int i=1;i<=nc;i++) if(nv[v][None[st][i]]) None[st+1][++nnc]=None[st][i];
        dfs(st+1,all+1,nsc,nnc);
        None[st][++nc]=v;
    }
}

int main() {
    rd(n), rd(k);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            rd(nv[i][j]);
    for(int i=1;i<=n;i++) Some[0][i]=i;
    dfs(0,0,n,0);
    LD ans=(LD)k/mx;
    ans=ans*ans*mx*(mx-1)/2.0;
    printf("%.10f",(double)ans);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值