【bzoj2560】串珠子 状压dp+容斥原理
题目描述
有 $n$ 个点,点 $i$ 和点 $j$ 之间可以连 $0\sim c_{i,j}$ 条无向边。求连成一张无向连通图的方案数模 $10^9+7$ 。
两个方案不同,当且仅当:存在点对 $(i,j$ ,使得 $i$ 与 $j$ 之间的边数不同。
输入
标准输入。输入第一行包含一个正整数n,表示珠子的个数。接下来n行,每行包含n个非负整数,用空格隔开。这n行中,第i行第j个数为ci,j。
输出
标准输出。输出一行一个整数,为连接方案数对1000000007取模的结果。
样例输入
3
0 2 3
2 0 4
3 4 0
样例输出
50
题解
状压dp+容斥原理
和 【bzoj3456】城市规划 的前半部分方法类似,用总连边方案数减去不连通方案数得到连通方案数。
但是在本题中点与点是不同的,因此采用状压dp的方法来解决。
设 $f_i$ 表示 $i$ 集合的点连成无向连通图的方案数,$g_i$ 表示 $i$ 集合的点连成无向图的方案数。
预处理出 $g_i$ ,根据定义得 $g_i=\prod\limits_{j.k\in i,j<k}(c_{j,k}+1)$ 。
然后求 $f_i$ 。用总方案数 $g_i$ 减去不连通的方案数。枚举 $i$ 集合中编号最小的点($i\&(-i)$)所在连通块的集合 $j$ ,减去 $f_jg_{i-j}$ 。
故状态转移方程为: $f_i=g_i-\sum\limits_{j\subsetneqq i,(i\&(-i))\in j}f_jg_{i-j}$ 。
最后的答案就是 $f_{2^n-1}$ 。
时间复杂度 $O(2^n·n^2+3^n)$
#include <cstdio>
#define mod 1000000007
typedef long long ll;
ll c[20][20] , f[65540] , g[65540];
int main()
{
int n , i , j , k;
scanf("%d" , &n);
for(i = 0 ; i < n ; i ++ )
for(j = 0 ; j < n ; j ++ )
scanf("%lld" , &c[i][j]);
for(i = 0 ; i < (1 << n) ; i ++ )
{
g[i] = 1;
for(j = 0 ; j < n ; j ++ )
for(k = 0 ; k < j ; k ++ )
if(i & (1 << j) && i & (1 << k))
g[i] = g[i] * (c[j][k] + 1) % mod;
f[i] = g[i];
for(j = i & (i - 1) ; j ; j = i & (j - 1))
if(j & (i & -i))
f[i] = (f[i] - f[j] * g[i ^ j] % mod + mod) % mod;
}
printf("%lld\n" , f[(1 << n) - 1]);
return 0;
}
【bzoj2560】串珠子 状压dp+容斥原理的更多相关文章
- bzoj2560串珠子 状压dp+容斥(?)
2560: 串珠子 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 515 Solved: 348[Submit][Status][Discuss] ...
- bzoj2560 串珠子 状压DP
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=2560 题解 大概是这类关于无向图的联通性计数的套路了. 一开始我想的是这样的,考虑容斥,那么就 ...
- BZOJ 2560: 串珠子 (状压DP+枚举子集补集+容斥)
(Noip提高组及以下),有意者请联系Lydsy2012@163.com,仅限教师及家长用户. 2560: 串珠子 Time Limit: 10 Sec Memory Limit: 128 MB Su ...
- 【BZOJ2560】串珠子 状压DP+容斥
[BZOJ2560]串珠子 Description 铭铭有n个十分漂亮的珠子和若干根颜色不同的绳子.现在铭铭想用绳子把所有的珠子连接成一个整体. 现在已知所有珠子互不相同,用整数1到n编号.对于第i个 ...
- 【uoj#37/bzoj3812】[清华集训2014]主旋律 状压dp+容斥原理
题目描述 求一张有向图的强连通生成子图的数目对 $10^9+7$ 取模的结果. 题解 状压dp+容斥原理 设 $f[i]$ 表示点集 $i$ 强连通生成子图的数目,容易想到使用总方案数 $2^{sum ...
- BZOJ1195 [HNOI2006]最短母串 【状压dp】
题目 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,„,Sn)都是T的子串. 输入格式 第一行是一个正整数n(n<=12),表示给定的字符串的 ...
- BZOJ2669 [cqoi2012]局部极小值 状压DP 容斥原理
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ2669 题意概括 有一个n行m列的整数矩阵,其中1到nm之间的每个整数恰好出现一次.如果一个格子比所 ...
- 4455: [Zjoi2016]小星星|状压DP|容斥原理
OrzSDOIR1ak的晨神 能够考虑状压DP枚举子集,求出仅仅保证连通性不保证一一相应的状态下的方案数,然后容斥一下就是终于的答案 #include<algorithm> #includ ...
- 【UVA1633】禁止的回文串(状压DP)
题意: 输入正整数n和k(1<=n<=400,1<=k<=10),求长度为n的01串中有多少个不含长度至少为k的回文连续子串.例如,n=k=3时只有4个串满足条件:001,01 ...
随机推荐
- echarts x轴文字换行显示
xAxis : [ { splitLine:{show:false}, type : 'category', data : ['社交人际','沟通交流','心理认知','游戏玩耍','大小运动','生 ...
- MySQL入门篇(六)之mysqldump备份和恢复
一.备份单个数据库 1.备份命令:mysqldump MySQL数据库自带的一个很好用的备份命令.是逻辑备份,导出 的是SQL语句.也就是把数据从MySQL库中以逻辑的SQL语句的形式直接输出或生成备 ...
- mono for andorid第一个小应用
先上图 这个小应用根据两人的姓名算出两人的关系,当然仅仅娱乐. 本来想多写写,但是实在觉得没什么可写的,而且本人正处于感冒状态,脑袋不怎么灵光,所以就不写那么多废话了. 安装mono的话,就上吾乐吧软 ...
- 强化学习读书笔记 - 12 - 资格痕迹(Eligibility Traces)
强化学习读书笔记 - 12 - 资格痕迹(Eligibility Traces) 学习笔记: Reinforcement Learning: An Introduction, Richard S. S ...
- 「日常训练」The Necklace(UVA-10054)
代码 for(int i=0; i!=n; ++i) { int u = cin.nextInt(); int v = cin.nextInt(); edges.add(new Edge(u,v)); ...
- 理解学习Springboot(一)
Springboot有何优势呢,网上一大推,这里就不写了. 一.配置maven 1.在maven官网下载maven,http://maven.apache.org/download.cgi 2.将下载 ...
- 在django中使用django_debug_toolbar
一.概述 django_debug_toolbar 是django的第三方工具包,给django扩展了调试功能. 包括查看执行的sql语句,db查询次数,request,headers,调试概览等. ...
- cinder的组件
跟nova相似,cinder也有很多组件,每个组件负责各自的业务,然后共同协作完成volume的管理.组件之间的通信方式与nova个组件之间的通信方式相同,都是通过消息队列进行通信. cinder-a ...
- 从零开始的Python学习Episode 10——函数
函数 一.函数的创建 简单格式 def function_name(参数表): 函数体 return 如果没有写return,函数会默认返回一个none 二.函数的参数 必需参数: 调用函数时必需参数 ...
- Pycharm实现服务器端代码的远程调试
Pycharm是很多人在学习机器学习时的常用IDE.但是,当代码需要庞大计算资源的时候,我们往往需要借助远程服务器的GPU资源.很多人都是将代码拷贝到服务器,然后运行,但是当修改调试的时候,很不方便 ...