2560: 串珠子

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 757  Solved: 497
[Submit][Status][Discuss]

Description

  铭铭有n个十分漂亮的珠子和若干根颜色不同的绳子。现在铭铭想用绳子把所有的珠子连接成一个整体。
  现在已知所有珠子互不相同,用整数1到n编号。对于第i个珠子和第j个珠子,可以选择不用绳子连接,或者在ci,j根不同颜色的绳子中选择一根将它们连接。如果把珠子看作点,把绳子看作边,将所有珠子连成一个整体即为所有点构成一个连通图。特别地,珠子不能和自己连接。
  铭铭希望知道总共有多少种不同的方案将所有珠子连成一个整体。由于答案可能很大,因此只需输出答案对1000000007取模的结果。
 

Input

 标准输入。输入第一行包含一个正整数n,表示珠子的个数。接下来n行,每行包含n个非负整数,用空格隔开。这n行中,第i行第j个数为ci,j。

 

Output

 标准输出。输出一行一个整数,为连接方案数对1000000007取模的结果。

Sample Input

3
0 2 3
2 0 4
3 4 0

Sample Output

50

HINT

  对于100%的数据,n为正整数,所有的ci,j为非负整数且不超过1000000007。保证ci,j=cj,i。每组数据的n值如下表所示。

题解

这题是一个状压DP,或者说子集DP。。

设计两个数组,f[i]代表构成一个状态为i的连通图的方案数。

g[i]代表构成一个状态为i的图(不保证联通)的方案数。

然后g[i]可以枚举i中的每一个有序点对对应的a[i][j]+1的乘积求出。

比如i在二进制下为1011,所以g[i]就是a[1][2]*a[1][4]*a[2][4];

那么f[i]怎么求呢?可以用容斥。

当前点集为联通图的方案数等于总方案数-一个子集是连通图的方案数*这个子集的补集不保证是连通图的方案数。

那么我们枚举子集就可以了。

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const long long mod=1e9+;
const long long N=;
long long n,a[N][N],g[<<],f[<<];
long long lowbit(long long x){
return x&-x;
}
int main(){
scanf("%lld",&n);
for(long long i=;i<=n;i++)
for(long long j=;j<=n;j++){
scanf("%lld",&a[i][j]);
}
for(long long i=;i<=(<<n)-;i++){
g[i]=;
for(long long j=;j<=n;j++){
if((<<j-)&i){
for(long long k=j+;k<=n;k++){
if((<<k-)&i){
g[i]=(g[i]*(a[j][k]+))%mod;
}
}
}
}
f[i]=g[i];
long long now=i^lowbit(i);
for(long long j=now;j;j=(j-)&now){
f[i]=((f[i]-f[i^j]*g[j])%mod+mod)%mod;
}
}
printf("%lld",f[(<<n)-]);
return ;
}

BZOJ 2560(子集DP+容斥原理)的更多相关文章

  1. [BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩)

    [BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩) 题面 给出一棵树和一个图,点数均为n,问有多少种方法把树的节点标号,使得对于树上的任意两个节点u,v,若树上u ...

  2. BZOJ 4006 [JLOI2015]管道连接(斯坦纳树+子集DP)

    明显是一道斯坦纳树的题. 然而这题只需要属性相同的点互相连接. 我们还是照常先套路求出\(ans[s]\). 然后对\(ans[s]\)做子集DP即可. 具体看代码. #include<iost ...

  3. 【uoj#37/bzoj3812】[清华集训2014]主旋律 状压dp+容斥原理

    题目描述 求一张有向图的强连通生成子图的数目对 $10^9+7$ 取模的结果. 题解 状压dp+容斥原理 设 $f[i]$ 表示点集 $i$ 强连通生成子图的数目,容易想到使用总方案数 $2^{sum ...

  4. 【bzoj2560】串珠子 状压dp+容斥原理

    题目描述 有 $n$ 个点,点 $i$ 和点 $j$ 之间可以连 $0\sim c_{i,j}$ 条无向边.求连成一张无向连通图的方案数模 $10^9+7$ .两个方案不同,当且仅当:存在点对 $(i ...

  5. [BZOJ4416][SHOI2013]阶乘字符串(子集DP)

    怎么也没想到是子集DP,想到了应该就没什么难度了. 首先n>21时必定为NO. g[i][j]表示位置i后的第一个字母j在哪个位置,n*21求出. f[S]表示S的所有全排列子序列出现的最后末尾 ...

  6. loj 300 [CTSC2017]吉夫特 【Lucas定理 + 子集dp】

    题目链接 loj300 题解 orz litble 膜完题解后,突然有一个简单的想法: 考虑到\(2\)是质数,考虑Lucas定理: \[{n \choose m} = \prod_{i = 1} { ...

  7. 【bzoj2339】[HNOI2011]卡农 dp+容斥原理

    题目描述 题解 dp+容斥原理 先考虑有序数列的个数,然后除以$m!$即为集合的个数. 设$f[i]$表示选出$i$个集合作为满足条件的有序数列的方案数. 直接求$f[i]$较为困难,考虑容斥,满足条 ...

  8. hdu 5823 color II —— 子集DP

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5823 看博客:http://www.cnblogs.com/SilverNebula/p/5929550. ...

  9. 洛谷 P2986 [USACO10MAR]Great Cow Gat…(树形dp+容斥原理)

    P2986 [USACO10MAR]伟大的奶牛聚集Great Cow Gat… 题目描述 Bessie is planning the annual Great Cow Gathering for c ...

随机推荐

  1. Unity的SendMessage方法

    用法(该对象所有脚本都能收到): gameObject.SendMessage("要执行的方法名"); 通知的另一种实现: gameObject.GetComponent<脚 ...

  2. 路飞学城Python-Day19

    [23.绑定方法与非绑定方法介绍] 再类的内部的定义的函数分为两大类: 1.绑定方法: 绑定到对象的方法:直接用def做的函数属性,类内部定义的函数,如果没有绑定装饰器,就是给对象使用的函数,绑定给谁 ...

  3. make 编译 linux 内核是单线程的任务 才用-j4命令使用4 线程加速

    今天使用 make 编译 linux 内核,发现CPU只用了30%多一点,而我的电脑是4核的,所以如果没有意外的话,make 编译 linux 内核的任务是用单线程做的. 又了解到,使用-j4参数可以 ...

  4. Element源码阅读(1)

    一.目的 阅读element源码旨在了解其代码的组织架构模式, 代码编写的方式, 以及组件化的一些思路, 对照自己, 从而进步. 二. 源码阅读所得 1.在element源码中的mixins目录之下, ...

  5. centos7最小化安装Oracle11gR2

    1.准备CentOS 7 系统环境 我以 CentOS-7-x86_64-DVD-1511.iso 为例,简述Oracle 11g的安装过程. 由于是使用静默模式(silent)安装的,无需使用图形化 ...

  6. vue如何根据返回的值对元素进行样式渲染

    1.最终显示样式: 需要:根据任务状态值,显示不同颜色的原点表示任务状态,以及对优先级的数据,进行☆标记 2.代码实现: 在<el-table-column>中需要显示的内容前面,添加图标 ...

  7. Thunder9(迅雷9)去掉右侧浏览器广告的方法

    1.打开文件夹C:\Program Files (x86)\Thunder Network\Thunder9\Program\TBC 2.找到 ThunderBrowser.exe 3.重命名为任意名 ...

  8. dockerfile centos+jdk+时区设置

    1.参考博客:https://blog.csdn.net/yjk13703623757/article/details/68944549 2.dockerfile如下 # Base os image ...

  9. elasticsearch的安装和使用

    准备环境: 环境: win7 64位  jdk1.8.0  elasticsearch2.3.3 elasticsearch2.3.3:https://www.elastic.co/thank-you ...

  10. 洛谷 P1529 回家 Bessie Come Home

    P1529 回家 Bessie Come Home 题目描述 现在是晚餐时间,而母牛们在外面分散的牧场中. 农民约翰按响了电铃,所以她们开始向谷仓走去. 你的工作是要指出哪只母牛会最先到达谷仓(在给出 ...