首页 > 其他分享 >【计数,DP】ABC306Ex Balance Scale

【计数,DP】ABC306Ex Balance Scale

时间:2023-07-10 15:11:31浏览次数:39  
标签:Scale int sum s0 fa ABC306Ex Balance subseteq mod

Problem Link

现在有 \(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;
}


标签:Scale,int,sum,s0,fa,ABC306Ex,Balance,subseteq,mod
From: https://www.cnblogs.com/Charlie-Vinnie/p/17541220.html

相关文章

  • 【WALT】scale_exec_time() 代码详解
    @目录【WALT】scale_exec_time()代码详解代码展示代码逻辑:为什么归一化?⑴ 将CPUcycles转换为CPU当前频率⑵ 归一化delta【WALT】scale_exec_time()代码详解代码版本:Linux4.9android-msm-crosshatch-4.9-android12代码展示staticinlineu64scale_exec_time(u64delt......
  • Paper Reading: A three-way decision ensemble method for imbalanced data oversamp
    目录研究动机文章贡献预备知识构造覆盖算法三向决策本文方法基于CCA的三向决策模型CTD集成实验结果数据集实验设置与过采样的比较显著性检验优点和创新点PaperReading是从个人角度进行的一些总结分享,受到个人关注点的侧重和实力所限,可能有理解不到位的地方。具体的细节还需......
  • 【论文阅读】CrossFormer: A Versatile Vision Transformer Based on Cross-scale Att
    来自CVPR2021论文地址:https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/2108.00154.pdf代码地址:https://link.zhihu.com/?target=https%3A//github.com/cheerss/CrossFormer一、Motivation 主要还是ViT的历史遗留问题ViT在处理输入时,将图片划分为了相等大小的图像......
  • Paper Reading: Model-Based Synthetic Sampling for Imbalanced Data
    目录研究动机文章贡献本文方法训练特征模型生成临时采样数据生成最终的合成数据实验结果数据集和实验设置实验结果消融实验结果可视化和集成学习相结合对非线性特征模型的影响特征关系对合成样本的影响优点和创新点PaperReading是从个人角度进行的一些总结分享,受到个人关注点的......
  • 如何使用libswscale库将YUV420P格式的图像序列转换为RGB24格式输出?
    一.视频格式转换初始化将视频中的图像帧按照一定比例缩放或指定宽高进行放大和缩小是视频编辑中最为常见的操作之一,这里我们将1920x1080的yuv图像序列转换成640x480的rgb图像序列,并输出到文件。视频图像转换的核心为一个SwsContext结构,其中保存了输入图像和输出图像的宽高以......
  • TDengine 发布 IoT 场景下 3.0 性能对比分析报告,全方位超越 InfluxDB & TimescaleDB
    6月26日,涛思数据旗下时序数据库(TimeSeriesDatabase)TDengine正式发布IoT场景下TDengine3.0性能对比分析报告,该报告在IoT场景下从数据写入、压缩和查询等维度,对比了TDengine与市场其他流行的时序数据库产品的性能差异,其中所有测试均在标准化条件下使用公开数据完成。......
  • TDengine 发布 IoT 场景下 3.0 性能对比分析报告,全方位超越 InfluxDB & TimescaleDB
    6月26日,涛思数据旗下时序数据库(TimeSeriesDatabase)TDengine正式发布IoT场景下TDengine3.0性能对比分析报告,该报告在IoT场景下从数据写入、压缩和查询等维度,对比了TDengine与市场其他流行的时序数据库产品的性能差异,其中所有测试均在标准化条件下使用公开数据完成......
  • Windows系统安装timescaledb
    TimescaleDB是基于PostgreSQL数据库打造的一款时序数据库,插件化的形式,随着PostgreSQL的版本升级而升级,不会因为另立分支带来麻烦。TimescaleDB具备以下特点1.基于时序优化2.自动分片(按时间、空间自动分片(chunk))3.全SQL接口4.支持垂直于横向扩展5.支......
  • [python] 基于matplotlib-scalebar库绘制比例尺
    matplotlib-scalebar是一个Python库,用于在matplotlib图形中添加比例尺。它允许用户指定比例尺的大小、位置、字体和颜色,以及比例尺的单位。该库支持不同的比例尺单位,例如米、英尺、英寸等。matplotlib-scalebar安装命令如下:pipinstallmatplotlib-scalebar比例尺是一种用于描......
  • No Feign Client or loadBalanced defined
     创建consumer通过feign调用provider服务时报错一开始是Controller里@Autowired爆红,无法识别EchoService在主启动类中添加@EnableFeignClient后红线消失但运行后出现上面图中的错误百度一下后得知SpringCloudFeign在Hoxton.M2RELEASED版本之后不再使用ribbon(看的教程里教......