传送门

题意简述:nnn个点的带边权无向图,定义一个图的权值是所有边的积,问所有nnn个点都连通的子图的权值之和。


思路:

fif_ifi​表示保证集合iii中所有点都连通其余点随意的方案数。

gig_igi​表示只考虑集合iii中所有点的状态的子图的权值和。

我们先预处理出ggg数组,然后考虑递推fff数组。

显然fif_ifi​是等于gig_igi​扣掉一些东西的,扣掉的应该就是不连通的情况。

于是我们枚举编号最小的点所在的连通块来扣掉非法情况。

时间复杂度O(n2n+3n)O(n2^n+3^n)O(n2n+3n)

代码:

#include<bits/stdc++.h>
#define ri register int
using namespace std;
typedef long long ll;
const int N=17,mod=1e9+7;
int n,f[1<<N],g[1<<N],val[N][N],bit[N],idx[1<<N];
inline int add(const int&a,const int&b){return a+b>=mod?a+b-mod:a+b;}
inline int dec(const int&a,const int&b){return a>=b?a-b:a-b+mod;}
inline int mul(const int&a,const int&b){return (ll)a*b%mod;}
inline int read(){
	int ans=0;
	char ch=getchar();
	while(!isdigit(ch))ch=getchar();
	while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
	return ans;
}
inline int lowbit(const int&x){return x&-x;}
int main(){
	n=read();
	for(ri i=0;i<n;++i)for(ri j=0;j<n;++j)val[i][j]=read();
	bit[0]=1,idx[1]=0;
	for(ri i=1;i<n;++i)bit[i]=bit[i-1]<<1,idx[bit[i]]=i;
	g[0]=1;
	for(ri i=1,x;i<(1<<n);++i){
		g[i]=g[i^lowbit(i)],x=idx[lowbit(i)];
		for(ri j=0;j<n;++j)if((i>>j)&1)g[i]=mul(g[i],add(val[x][j],1));
	}
	g[0]=0;
	for(ri i=1,x;i<(1<<n);++i){
		f[i]=g[i];
		for(ri j=i^lowbit(i),stat=j;~stat;stat=!stat?-1:j&(stat-1))f[i]=dec(f[i],mul(g[j^stat],f[lowbit(i)^stat]));
	}
	cout<<f[(1<<n)-1];
	return 0;
}

2019.02.09 bzoj2560: 串珠子(状压dp+简单容斥)的更多相关文章

  1. bzoj2560串珠子 状压dp+容斥(?)

    2560: 串珠子 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 515  Solved: 348[Submit][Status][Discuss] ...

  2. bzoj2560 串珠子 状压DP

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=2560 题解 大概是这类关于无向图的联通性计数的套路了. 一开始我想的是这样的,考虑容斥,那么就 ...

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

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

  4. BZOJ 2560: 串珠子 (状压DP+枚举子集补集+容斥)

    (Noip提高组及以下),有意者请联系Lydsy2012@163.com,仅限教师及家长用户. 2560: 串珠子 Time Limit: 10 Sec Memory Limit: 128 MB Su ...

  5. UOJ #129 / BZOJ 4197 / 洛谷 P2150 - [NOI2015]寿司晚宴 (状压dp+数论+容斥)

    题面传送门 题意: 你有一个集合 \(S={2,3,\dots,n}\) 你要选择两个集合 \(A\) 和 \(B\),满足: \(A \subseteq S\),\(B \subseteq S\), ...

  6. 【BZOJ2560】串珠子 状压DP+容斥

    [BZOJ2560]串珠子 Description 铭铭有n个十分漂亮的珠子和若干根颜色不同的绳子.现在铭铭想用绳子把所有的珠子连接成一个整体. 现在已知所有珠子互不相同,用整数1到n编号.对于第i个 ...

  7. hdu 5471(状压DP or 容斥)

    想了最复杂的思路,用了最纠结的方法,花了最长的时间,蒙了一种规律然后莫名其妙的过了. MD 我也太淼了. 后面想了下用状压好像还是挺好写的,而且复杂度也不高.推出的这个容斥的规律也没完全想透我就CAO ...

  8. 【HDOJ5519】Kykneion asma(状压DP,容斥)

    题意:给定n和a[i](i=0..4),求所有n位5进制数中没有前导0且i出现的次数不超过a[i]的数的个数 2<=n<=15000,0<=a[i]<=3e4 思路:设f(n, ...

  9. bzoj4036 [HAOI2015]按位或 状压DP + MinMax 容斥

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4036 题解 变成 \(2^n-1\) 的意思显然就是每一个数位都出现了. 那么通过 MinMa ...

随机推荐

  1. Instrumentation类——Android自动化测试学习历程

    这里需要把Instrumentation类的视频的上.中.下三集一起看,把内容总结一下... 视频地址: http://study.163.com/course/courseLearn.htm?cou ...

  2. css定位研究

    css的定位是很重要的一个知识点,要学会网页布局,一定要先把定位弄清楚,今天抽空整理一下这方面的知识. 1.块级元素和行内元素(内联元素) 块级元素:display值为block的元素就是块级元素,比 ...

  3. REUSE_ALV_FIELDCATALOG_MERGE

    作用: 根据程序中的数据内表结构,来自动生成FIELDCAT[]内表,不用定义宏或者Form来一个个加入,会根据内表结构所参照的词典类型来自动完成如表标题字段名的生成,得到大概的FIELDCAT[]后 ...

  4. Specified key was too long; max key length is 767 bytes

    MySQL) )); Database changed ERROR (): Specified bytes drop table if exists test; ) primary key)chars ...

  5. android的图片的初步学习理解

    Android支持JPEG和PNG格式.GIF和BMP格式图片的支持. 图片最终要显示在屏幕上,都会对应一个屏幕上的点,即对应一个颜色值.不同格式的图片,只是不同压缩编码和解压算法. 也就是说,我们看 ...

  6. Redis 中 redis.conf配置详细解析

    ########################################### 基本配置 ##################################### # 端口 port 666 ...

  7. Python数据分析--Pandas知识点(二)

    本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) 下面将是在知识点一的基础上继续总结. 13. 简单计算 新建一个数据表 ...

  8. 解决python3 UnicodeEncodeError: 'gbk' codec can't encode character '\xXX' in position XX(转)

    原文地址:https://www.cnblogs.com/feng18/p/5646925.html 从网上抓了一些字节流,想打印出来结果发生了一下错误: UnicodeEncodeError: 'g ...

  9. Oracle性能优化2- 依据场景选择技术

    1.索引的坏处 索引可以加快查询效率,但是使用不当,会造成插入性能很低 drop table test1 purge; drop table test2 purge; drop table test3 ...

  10. c#设计模式3抽象工厂模式(Abstract Factory)

    #region 坦克系列 abstract class Tank { abstract public void Go(); } /// <summary> /// 越野车 /// < ...