题意:

有一张无重边的无向图, 求有多少个边集,使得删掉边集里的边后,图里恰好有K个联通块。

解法:

考虑dp,$h(i,S)$表示有$i$个联通块,点集为$S$的图的个数,$g(S)$表示点集为S的连通图的个数。

所以有$h(i,S) = \sum_{S_0 \subseteq S}{h(i-1,S_0) \cdot f(S-S0)}$

$answer = \frac{h(K,ALL)}{K!}$

接下来只要求出 $g(S)$ 即可,考虑 $dp$

首先枚举一个点 $x$ ,求出所有包含 $x$ 的 $g(S)$,然后递归求去掉 $x$ 的 $g(S)$ ,直到 $S$ 为空

求包含 $x$ 的$g(S)$ 时,可以考虑用容斥来求。

$M(S)$ 表示 $S$ 集合内有多少条边。

$f(S) = 2^{M(S)} - \sum_{S_0 \subseteq S}{f(S0) \cdot 2^{M(S-S0)} }$

时间复杂度$O(K \cdot 3^n)$

 #include <iostream>
#include <cstdio>
#include <cstring> #define N 15
#define LL long long
#define bit(x) (1<<(x))
#define P 1000000009LL using namespace std; int n,m,K;
int cnt[<<N];
LL f[<<N],all[<<N],ansv[<<N];
LL h[N][<<N];
int g[N]; int cnt_bit(int S)
{
int ans=;
for(;S;S>>=) if(S&) ans++;
return ans;
} LL qpow(LL x,int n)
{
LL ans=;
for(;n;n>>=,x=x*x%P)
if(n&) ans=ans*x%P;
return ans;
} LL calc(int S)
{
int tmp=;
for(int i=;i<n;i++)
if(S&bit(i)) tmp += cnt[S&g[i]];
return qpow(,tmp);
} int main()
{
int Te=;
int T;
cin>>T;
for(int S=;S<(<<N);S++) cnt[S]=cnt_bit(S);
while(~scanf("%d%d%d",&n,&m,&K))
{
for(int i=;i<n;i++) g[i]=;
for(int i=,x,y;i<=m;i++)
{
scanf("%d%d",&x,&y);
x--;
y--;
g[x]|=bit(y);
}
for(int S=;S<(<<n);S++) all[S]=calc(S);
for(int i=;i<n;i++)
{
ansv[]=;
for(int S=;S<(<<n);S++)
if(S&bit(i))
{
f[S]=all[S];
for(int S0=S;S0;S0=(S0-)&S)
if((S0&bit(i)) && S0<S)
{
f[S] += P - f[S0]*all[S^S0]%P;
if(f[S]>=P) f[S]-=P;
}
ansv[S]=f[S];
}
}
for(int S=;S<(<<n);S++) h[][S]=;
h[][]=;
for(int i=;i<=K;i++)
{
for(int S=;S<(<<n);S++)
{
h[i][S]=;
for(int S0=S;S0;S0=(S0-)&S)
{
h[i][S] += h[i-][S^S0]*ansv[S0]%P;
if(h[i][S]>=P) h[i][S]-=P;
}
}
}
LL fac_K=;
for(int i=;i<=K;i++) fac_K=fac_K*i%P;
printf("Case #%d:\n",++Te);
cout << h[K][(<<n)-]*qpow(fac_K,P-)%P << endl;
}
return ;
}

K个联通块的更多相关文章

  1. 树上第k大联通块

    题意:求树上第k大联通块 n,k<=1e5 考虑转化为k短路的形式. 也就是要建出一张图是的这条图上每一条S到T的路径都能代表一个联通块. 点分治建图 递归下去,假定每个子树的所有联通块中都可以 ...

  2. [HDU5713]K个联通块

    [HDU5713]K个联通块 题目大意: 有一张\(n(n\le14)\)个点,\(m\)条边无重边的无向图,求有多少个边集,使得删掉边集里的边后,图里恰好有\(k\)个连通块. 思路: 一个显然的动 ...

  3. 【HDOJ5713】K个联通块(状压DP,计数)

    题意:有一张无重边的无向图, 求有多少个边集,使得删掉边集里的边后,图里恰好有K个连通块. 1≤T≤201≤K≤N≤140≤M≤N∗(N+1)/21≤a,b≤N 思路:From http://blog ...

  4. hdu5713 K个联通块[2016百度之星复赛B题]

    dp 代码 #include<cstdio> ; ; int n,m,k,cnt[N]; ]; ][],i,j,l,a,b; int check(int x,int y) { int i; ...

  5. Codeforces 731C. Socks 联通块

    C. Socks time limit per test: 2 seconds memory limit per test: 256 megabytes input: standard input o ...

  6. Codeforces Round #369 (Div. 2) D. Directed Roads dfs求某个联通块的在环上的点的数量

    D. Directed Roads   ZS the Coder and Chris the Baboon has explored Udayland for quite some time. The ...

  7. Educational Codeforces Round 5 - C. The Labyrinth (dfs联通块操作)

    题目链接:http://codeforces.com/contest/616/problem/C 题意就是 给你一个n行m列的图,让你求’*‘这个元素上下左右相连的连续的’.‘有多少(本身也算一个), ...

  8. [洛谷P1197/BZOJ1015][JSOI2008]星球大战Starwar - 并查集,离线,联通块

    Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过 ...

  9. PAT A1013 Battle Over Cities (25 分)——图遍历,联通块个数

    It is vitally important to have all the cities connected by highways in a war. If a city is occupied ...

随机推荐

  1. Apache Server与多个独立Tomcat集成

    取经自http://www.ramkitech.com/2012/03/virtual-host-apache-httpd-server-tomcat.html 继续干Tomcat和Apache Se ...

  2. ReboletricSample工程搭建

    受到  Just Say No to More End-to-End Tests 文章链接:http://googletesting.blogspot.tw/2015/04/just-say-no-t ...

  3. 关于erlang反编译的东西

    在查阅了相关文档,想了解erlang反编译的东西.当然,源码可以打包成可以获取源码的,也可以保护源码的. 在ebin下,如果没有或者找不到源码,可以进行反编译,由beam文件得到erl文件. 可以通过 ...

  4. windows常用快捷键(转载)

    f1 显示当前程序或者windows的帮助内容. f2 当你选中一个文件的话,这意味着“重命名” f3 当你在桌面上的时候是打开“查找:所有文件” 对话框 f10或alt 激活当前程序的菜单栏 win ...

  5. listview 下拉刷新

    http://blog.csdn.net/lancees/article/details/7776853

  6. 九度OJ 1116:加减乘除 (基础题)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1466 解决:902 题目描述: 根据输入的运算符对输入的整数进行简单的整数运算. 运算符只会是加+.减-.乘*.除/.求余%.阶乘!六个运 ...

  7. Java类加载器(死磕3)

    [正文]Java类加载器(  CLassLoader ) 死磕3:  揭秘 ClassLoader抽象基类 本小节目录 3.1. 类的加载分类:隐式加载和显示加载 3.2. 加载一个类的五步工作 3. ...

  8. ALTER USER USER() IDENTIFIED BY 'password';

    [root@test mysql]# bin/mysqld 2018-08-04T14:09:33.831318Z 0 [Warning] [MY-011070] [Server] 'Disablin ...

  9. FireMonkey下的WndProc实现

    unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Types, System.UI ...

  10. intelliJ IDEA springMVC 搭建配置

    1.添加参数 archetypeCatalog=internal