传送门

题意简述: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. shell中参数的传递

    1.命令行参数 向shell脚本传递数据的最基本方式是使用命令行参数. (1) 读取参数 读取输入的参数的变量为位置参数,位置参数通过标准数字表示, 其中$0为程序名称,$1为第一个参数,$2为第二个 ...

  2. 202. Happy Number (INT)

    Write an algorithm to determine if a number is "happy". A happy number is a number defined ...

  3. php项目执行composer install时报错

    报错信息: Loading composer repositories with package informationInstalling dependencies (including requi ...

  4. Springboot学习01- 配置文件加载优先顺序和本地配置加载

    Springboot学习01-配置文件加载优先顺序和本地配置加载 1-项目内部配置文件加载优先顺序 spring boot 启动会扫描以下位置的application.properties或者appl ...

  5. Django2.0的path方法无法使用正则表达式的解决办法

    本人的django的版本是2.0.6 在django项目中,在urls.py文件中,匹配路由用的path方法,之前我用的都是url方法 写了一个path方法,使用正则表达式 from django.c ...

  6. Windows如何安装Android SDK

    我们都知道App测试分为Android和IOS两种客户端,当我们测试Android版本的App的时候经常要安装Android环境,那么安装Android SDK 就是必不可少的,接下来我们就来看看如何 ...

  7. list转map

    参考https://cloud.tencent.com/developer/article/1033706 import java.lang.reflect.Field; import java.ut ...

  8. 微信小程序 页面跳转navigator与传递参数

    页面之间跳转使用 navigator标签,wx.navigateTo ,wx.redirectTo 1.URL就是跳转的页面路径.上面代码中就是navigator目录下的navigator页面,tit ...

  9. [Z]Spring Data JPA 之 一对一,一对多,多对多 关系映射

    一.@OneToOne关系映射 JPA使用@OneToOne来标注一对一的关系. 实体 People :用户. 实体 Address:家庭住址. People 和 Address 是一对一的关系. 这 ...

  10. three.map.control

    网址:https://github.com/anvaka/three.map.control 在threejs群里发现的一个很有意思的问题之前没有接触过: 存在的问题:  我在微信小游戏中,用orbi ...