【计数,DP】ABC306Ex Balance Scale
现在有 \(n\) 个球,每个球有一个重量,重量未知。接下来会进行 \(m\) 次称重,每次给定 \(a_i\) 和 \(b_i\),比较这两个球的重量,结果可能是 \(>,=,<\) 中的一种。求在所有 \(3^m\) 个结果中有几种是可能出现的。
\(n\le 17,m\le n(n-1)/2\)。
技巧:怎样配容斥系数
将 \((a_i,b_i)\) 视作一条边,就是给每条边定一个方向或者定相等,要求不能成环。
思路是假装我们已经枚举那些为 \(=\) 的边了,然后要求剩下的边形成一个 DAG。而枚举 \(=\) 的边的过程可以在接下来的 DP 中顺便做。
考虑如果不允许出现 \(=\) 的话怎么做。对于一个 DAG,处理它的方法当然是依次剥掉入度为 \(0\) 的点集。重点问题在于怎样避免算重。
考虑容斥,钦定一个点集 \(T_1\) 是当前 DAG 中所有入度为 \(0\) 的点集,其中 \(T_1\) 非空。接下来要容斥,于是枚举一个 \(T\supseteq T_1\) 为实际上真正入度为 \(0\) 的点集,那么容斥系数显然为 \((-1)^{|T|-|T_1|}\)。
于是可以列出转移方程 \(f(S)=\sum_{T_1\subseteq S,T_1\neq \varnothing}\sum_{T\supseteq T_1}(-1)^{|T|-|T_1|}f(S\setminus T)\)。
然后发现这个 \(T_1\) 意义不明,于是改为枚举 \(T\subseteq S\),则合法的 \(T_1\) 数量为 \(\sum_{T_1\subseteq T,T_1\neq \varnothing}(-1)^{|T|-|T_1|}=(-1)^{|T|-1}\)。
得到 \(f(S)=\sum_{T\subseteq S,T\neq \varnothing}(-1)^{|T|-1}f(S\setminus T)\)。
然后把 \(=\) 的边加进去,发现把 \(|T|\) 改成 \(c(T)\) 即可,其中 \(c(T)\) 表示 \(T\) 中的点的导出子图的连通块个数。
最终转移方程为 \(f(S)=\sum_{T\subseteq S,T\neq \varnothing}(-1)^{c(T)-1}f(S\setminus T)\)。
时间复杂度 \(O(3^n)\)。
点击查看代码
#include <bits/stdc++.h>
#define For(i,a,b) for(int i=a;i<=b;i++)
#define Rev(i,a,b) for(int i=a;i>=b;i--)
#define Fin(file) freopen(file,"r",stdin);
#define Fout(file) freopen(file,"w",stdout);
using namespace std;
const int mod=998244353; using ll = long long;
int n,m,a[305],b[305],all,G[17],f[1<<17],cnt[1<<17];
inline void ck(int& x,int y) { x+=y-mod; x+=x>>31&mod; }
int main(){
cin>>n>>m; all=(1<<n)-1; For(i,0,n-1) G[i]|=1<<i;
For(i,1,m){
int x,y; cin>>x>>y; x--,y--; G[x]|=1<<y; G[y]|=1<<x; a[i]=x,b[i]=y;
}
For(s,0,all){
int fa[17]={0}; iota(fa,fa+n,0);
function<int(int)> getfa=[&](int x){return x==fa[x]?x:fa[x]=getfa(fa[x]);};
For(i,1,m) if((s>>a[i]&1)&&(s>>b[i]&1)) fa[getfa(b[i])]=getfa(a[i]);
For(i,0,n-1) if((s>>i&1)&&fa[i]==i) cnt[s]++;
}
f[0]=1; For(s,1,all) for(int s0=s;s0;s0=(s0-1)&s) f[s]=(f[s]+1ll*f[s^s0]*(cnt[s0]&1?1:mod-1))%mod;
cout<<f[all]<<'\n';
return 0;
}
【计数,DP】ABC306Ex Balance Scale的更多相关文章
- HDU5800 To My Girlfriend 背包计数dp
分析:首先定义状态dp[i][j][s1][s2]代表前i个物品中,选若干个物品,总价值为j 其中s1个物品时必选,s2物品必不选的方案数 那么转移的时候可以考虑,第i个物品是可选可可不选的 dp[i ...
- CodeForces 176B Word Cut (计数DP)
Word Cut Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit St ...
- [DP之计数DP]
其实说实在 我在写这篇博客的时候 才刚刚草了一道这样类型的题 之前几乎没有接触过 接触过也是平时比赛的 没有系统的做过 可以说0基础 我所理解的计数dp就是想办法去达到它要的目的 而且一定要非常劲非常 ...
- HDU4815/计数DP
题目链接[http://acm.hdu.edu.cn/showproblem.php?pid=4815] 简单说一下题意: 有n道题,每到题答对得分为a[ i ],假如A不输给B的最小概率是P,那么A ...
- HDU 6377 度度熊看球赛 (计数DP)
度度熊看球赛 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
- 计数dp
计数dp 计数类的$dp$没做过几个,所以之前都放到"思维"标签下了,后来发现原来这属于一类问题啊...搬过来了. 管道取珠:https://www.lydsy.com/Judge ...
- [SDOI2010]地精部落[计数dp]
题意 求有多少长度为 \(n\) 的排列满足 \(a_1< a_2> a_3 < a_4 \cdots\) 或者 $a_1> a_2 < a_3 > a_4\cdo ...
- 【BZOJ】2111: [ZJOI2010]Perm 排列计数 计数DP+排列组合+lucas
[题目]BZOJ 2111 [题意]求有多少1~n的排列,满足\(A_i>A_{\frac{i}{2}}\),输出对p取模的结果.\(n \leq 10^6,p \leq 10^9\),p是素数 ...
- 【AtCoder】AGC022 F - Leftmost Ball 计数DP
[题目]F - Leftmost Ball [题意]给定n种颜色的球各k个,每次以任意顺序排列所有球并将每种颜色最左端的球染成颜色0,求有多少种不同的颜色排列.n,k<=2000. [算法]计数 ...
- 【BZOJ】4559: [JLoi2016]成绩比较 计数DP+排列组合+拉格朗日插值
[题意]n位同学(其中一位是B神),m门必修课,每门必修课的分数是[1,Ui].B神碾压了k位同学(所有课分数<=B神),且第x门课有rx-1位同学的分数高于B神,求满足条件的分数情况数.当有一 ...
随机推荐
- 下一代APP Store——GPT应用商店GPTs初体验
uploading-image-126879.png 近期,OpenAI宣布GPT应用商店正式上线,目前拥有plus的用户已经可以体验了. OpenAI将GPT应用商店命名为GPTs,这也是之前发布会 ...
- iOS上架审核宝典:如何避免被拒一次提交成功
Xcode 摘要:本文整理了iOS上架需要注意的事项,以帮助从事iOS开发和App运营的朋友们避免审核被拒的困扰.通过遵循这些指南,我们可以在一次提交中成功地将应用上架,并节省宝贵的时间和精力. 引言 ...
- QA团队基于DataLeap开放平台能力的数据测试实践
背景 &痛点 随着生态体系扩展和业务发展,数据在业务中承担的决策场景越来越多样化,一部分数据已应用在资损.高客诉等高风险场景,因此对数据质量的要求,尤其是高风险场景的质量要求非常之高.但在保障 ...
- 用ChatGPT 玩转哔哩哔哩
用ChatGPT 玩转哔哩哔哩 哔哔终结者 BibiGPT 哔哩哔哩 BiliGPT,一款智能AI工具,帮助用户一键总结 哔哩哔哩视频内容,非常省心,软件基于GPT-3.5 AI,如果无法使用,可以使 ...
- 【奥运会】yahoo的这个骚操作令人费解。。。
昨天在朋友圈发了一张截图,貌似很多朋友没有 get 到点,我也实在搞不懂 Yahoo 的这波操作. 默认排序是按照金牌总数,那必然是美国第一名了.不过习惯上不应该是按照金牌总数进行排名吗?毕竟金银铜牌 ...
- k8s--容器挂载 error: /proc must be mounted
问题描述: 登录容器,执行ps命令查看进程时,报错/proc挂载问题,如下图,按照图上所说在/etc/fstab 下添加,还是报错 思路: 可能是lxcfs挂了或者hang住了,具体要登录k8s节点实 ...
- 8、SpringBoot 事务
系列导航 springBoot项目打jar包 1.springboot工程新建(单模块) 2.springboot创建多模块工程 3.springboot连接数据库 4.SpringBoot连接数据库 ...
- secure boot (一)fit image
前言 secure boot 和FIT Image是前段时间接触到的,其实早就该总结下了,奈何懒癌犯了,拖了好久才写出来. 之前也有人问我,工作后最大的感受是什么?我的回答是:"快速学习&q ...
- jdk与tomcat的安装部署(CentOS8)(VM)
一.登陆CentOS8 通过VMware Workstation登陆CentOS8系统 二.VMware Tools安装 1.找到VMware Tools对应文件: VMwareTools-10. ...
- React报错之The tag is unrecognized in this browser
正文从这开始~ 总览 当我们使用一个在浏览器中不存在的标签或以小写字母开头的组件名称时,会产生"The tag is unrecognized in this browser"Re ...