bzoj2560串珠子——子集DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2560
转载:
很明显的状压dp
一开始写的dp可能会出现重复统计的情况 而且难以去重
假设 一个状态s的随意连边集合是A;
那么 A应该是 全部合法的方案(Ans)+sigma(某一部分合法(即某一部分是连通图)的方案*其他任意连边的方案);
那么可以把最终答案设置为f[i], 随意连边(也可以完全连边)设置成g[i];
先定一个基准点 x 和基准点相连的都是合法的, 其余集合 t=s^(1<<(x-1))可以随便连;
f[i]=g[i]-sigma((t的所有子集i)f[i]*g[s^i]);
为什么一个是f 一个是g 这样其实是要保证不重不漏
而且必须特别注意划分点一定是连通部分的,因为单个的点也算连通,但是这个“连通”会和随便连的方案混在一起(比如此时没有一个点相互连通的情况);
但是确实有这样的情况,所以如果把划分点作为连通部分,那么这种方案只被算了一次,不会多算;
而若把划分点作为随便连部分,那么其他每个点都会有一次单独连通情况,就会多算了。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
ll const mod=;
ll n,a[][],f[<<],g[<<];
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
scanf("%d",&a[i][j]);
int m=(<<n)-;
for(int s=;s<=m;s++)
{
g[s]=;
for(int i=;i<=n;i++) if(s&(<<(i-)))
for(int j=i+;j<=n;j++) if(s&(<<(j-)))
(g[s]*=(a[i][j]+))%=mod;
f[s]=g[s];
int nw;
for(nw=n-;;nw--)
if(s&(<<nw))break;
nw=(s^(<<nw));//去掉一个划分点
for(int k=nw;k;k=((k-)&nw))//枚举nw的子集
((f[s]-=g[k]*f[s^k])+=mod)%=mod;//f和g别反
}
printf("%lld",f[m]);
return ;
}
bzoj2560串珠子——子集DP的更多相关文章
- bzoj2560串珠子 状压dp+容斥(?)
2560: 串珠子 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 515 Solved: 348[Submit][Status][Discuss] ...
- bzoj2560串珠子(子集dp)
铭铭有n个十分漂亮的珠子和若干根颜色不同的绳子.现在铭铭想用绳子把所有的珠子连接成一个整体. 现在已知所有珠子互不相同,用整数1到n编号.对于第i个珠子和第j个珠子,可以选择不用绳子连接,或者在ci, ...
- $bzoj2560$ 串珠子 容斥+$dp$
正解:容斥+$dp$ 解题报告: 传送门$QwQ$ $umm$虽然题目蛮简练的了但还是有点难理解,,,我再抽象一点儿,就说有$n$个点,点$i$和点$j$之间有$a_{i,j}$条无向边可以连,问有多 ...
- bzoj2560 串珠子 状压DP
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=2560 题解 大概是这类关于无向图的联通性计数的套路了. 一开始我想的是这样的,考虑容斥,那么就 ...
- 2019.02.09 bzoj2560: 串珠子(状压dp+简单容斥)
传送门 题意简述:nnn个点的带边权无向图,定义一个图的权值是所有边的积,问所有nnn个点都连通的子图的权值之和. 思路: fif_ifi表示保证集合iii中所有点都连通其余点随意的方案数. gig ...
- [BZOJ2560]串珠子:状压DP+容斥原理
分析 为什么我去年6月做过这道题啊,估计当时抄的题解. 具体做法就是令\(f[S]\)表示保证连通点集\(S\)的方案数,\(g[S]\)表示不保证连通点集\(S\)的方案数. 容易想到: \[g[S ...
- bzoj2560 串珠子
Description 铭铭有n个十分漂亮的珠子和若干根颜色不同的绳子.现在铭铭想用绳子把所有的珠子连接成一个整体. 现在已知所有珠子互不相同,用整数1到n编号.对于第i个珠子和第j个珠子,可以选择不 ...
- 【题解】Bzoj2560串珠子
挺强的……容斥+状压DP.首先想到如果可以求出f[k],f[k]代表联通状态为k的情况下的合法方案数,则f[k] = g[k] - 非法方案数.g[k]为总的方案数,这是容易求得的.那么非法方案数我们 ...
- 题解-bzoj2560 串珠子
刚被教练数落了一通,心情不好,来写篇题解 Problem bzoj2560 题目简述:给定\(n\)个点的,每两个点\(i,j\)之间有\(c_{i,j}\)条直接相连的路(其中只能选一条或不选),问 ...
随机推荐
- VMware 虚拟机下载链接
VMware 14 链接: https://pan.baidu.com/s/1mBeyX2Z6hGpbFc8_UC-sEw 提取码: 462t 密钥:AA510-2DF1Q-H882Q-XFPQE-Q ...
- 推荐几款屏幕录制工具(可录制GIF)
我们经常会遇到一些场景,需要你向别人展示一些操作或是效果——例如告诉别人某某软件的配置步骤啊.刚设计出来网站的动画效果怎么样啊.某某电影里面的一个镜头多么经典啊.打得大快人心的NBA绝杀瞬间是怎么回事 ...
- Javascript构造函数和原型
相信你已经知道了,Javascript函数也可以作为对象构造器.比如,为了模拟面向对象编程中的Class,可以用如下的代码 function Person(name){ this.name = nam ...
- 关于button中设置文字不显示的问题
这个因为使用的image加载方式是setimage而不是setbackgroundimage导致文字始终出不来.
- 【Gradle】配置中引用的jar包版本后面自动加冒号导致引入jar包失败的问题/gradle中引用jar包版本不一致的问题/gradle中引用jar失败的问题 解决方法
idea中 gradle中 引用jar包,版本后面默认加:的问题 gradle中引用jar包版本不一致的问题 gradle中引用jar失败的问题 如上题目所示,三个问题其实都是同一样的简单又恶心,因为 ...
- jquery提示消息,简单通用
jquery提示消息.简单通用 function showTips(txt,time,status) { var htmlCon = ''; if(txt != ''){ if(status != 0 ...
- AnimalWindow使用,实现界面动态消失
http://m.blog.csdn.net/blog/shufac/24932279 http://blog.sina.com.cn/s/blog_455245fc01000a42.html Ani ...
- 【POJ 1716】Integer Intervals(差分约束系统)
id=1716">[POJ 1716]Integer Intervals(差分约束系统) Integer Intervals Time Limit: 1000MS Memory L ...
- SVN——库合并
从下午開始做库的合并.刚開始一直将路径弄错.后来纠结至死的时候,finally and finally,succeed~ 库合并是这样子的: 如今,我要把项目1这个库合并到部门1的项目1目录中,为了 ...
- 代码调试过程中easy遇到的问题
前两天身体有些不舒服,也没写啥新文章,昨天下了一天的雨.今天阳光明媚,空气也非常新奇.心情大好. 继翻译为什么输出是String而不是Object,今天先写一下调试方面的东西.java中自带的函数调试 ...