[abc306h/ex] Balance Scale
Ex - Balance Scale
考虑只有>和<的情况,相当于给每条边定向,当且仅当成环时不合法,那么方案数就是\(DAG\)的方案数
对于=,就是将两个点合并
然后对于一般的求\(n\)个点的\(DAG\)的方案数为\(\sum_{i=1}^n (-1)^{i+1}C_n^i2^{i\times(n-i)}\)(枚举入度为\(0\)的点的数量,然后设入度为\(0\)的点的集合为\(A\),所有点的集合为\(N\),那么就是\(A\)内部没有连边。\(A\)向\(N-A\)连边,但是这样不能保证\(N-A\)中没有入度为\(0\)的点,所以容斥)
容斥系数为\((-1)^{i+1}\)的原因:
一般的二项式反演为:\(\sum_{j=i}^n (-1)^{j-i}f(j)\),然后我们在\(DAG\)中\(i=1\),而\((-1)^{i-1}\)和\((-1)^{i+1}\)相等,所以是\((-1)^{i+1}\)
那么这道题是给定的边,且边的方向随意,所以我们考虑枚举独立集(相当于上文中的\(A\)),而普通的求\(DAG\)的边是任意连的,而这道题的边是给定的,所以就没有\(2^{i\times(n-i)}\),即设我们当前总集\(N\),枚举的子集为\(A\)(\(A\)内部属于同一连通块的点全部合并),那么\(A\)向\(N-A\)的连边就是固定的,所以用于转移的是剩下的部分\(N-A\)内部连边的方案数,系数就是\((-1)^{A中独立集的数量+1}\)
#include<bits/stdc++.h>
using namespace std;
const int MOD=998244353;
void add(int &x,int y){ x+=y; if(x>=MOD) x-=MOD; if(x<0) x+=MOD; }
int n,m,f[1<<17],cnt[1<<17],a[400],b[400],fa[18];
int find(int x){
if(fa[x]==x) return x;
return fa[x]=find(fa[x]);
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i) scanf("%d%d",&a[i],&b[i]);
for(int i=1;i<(1<<n);++i) cnt[i]=cnt[i>>1]+(i&1);
for(int s=1;s<(1<<n);++s){
for(int i=1;i<=n;++i) fa[i]=i;
for(int i=1;i<=m;++i)
if((s&(1<<a[i]-1))&&(s&(1<<b[i]-1))){
int x=find(a[i]),y=find(b[i]);
if(x!=y) fa[x]=y,--cnt[s];
}
}
f[0]=1;
for(int s=1;s<(1<<n);++s)
for(int t=s;t;t=((t-1)&s)){
if(cnt[t]&1) add(f[s],f[s^t]);
else add(f[s],-f[s^t]);
// if(t==0) break;
}
printf("%d",f[(1<<n)-1]);
return 0;
}
[abc306h/ex] Balance Scale的更多相关文章
- 【搜索+set去重】Balance Scale
Balance Scale 题目描述 You, an experimental chemist, have a balance scale and a kit of weights for measu ...
- 每日英语:Boost Your Balance; Avoid Falls
If you find yourself needing to sit down to take off your shoes, it might be time to start paying at ...
- Counterfeit Dollar -----判断12枚钱币中的一个假币
Counterfeit Dollar Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u ...
- POJ 1013 Counterfeit Dollar
Counterfeit Dollar Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 36206 Accepted: 11 ...
- poj1013.Counterfeit Dollar(枚举)
Counterfeit Dollar Time Limit: 1 Sec Memory Limit: 64 MB Submit: 415 Solved: 237 Description Sally ...
- Counterfeit Dollar 分类: POJ 2015-06-12 15:28 19人阅读 评论(0) 收藏
Counterfeit Dollar Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 41559 Accepted: 13 ...
- codeforces 630D Hexagons!
D. Hexagons! time limit per test 0.5 seconds memory limit per test 64 megabytes input standard input ...
- Poj 1013 Counterfeit Dollar / OpenJudge 1013(2692) 假币问题
1.链接地址: http://poj.org/problem?id=1013 http://bailian.openjudge.cn/practice/2692 http://bailian.open ...
- POJ 1013 Counterfeit Dollar 集合上的位运算
Description Sally Jones has a dozen Voyageur silver dollars. However, only eleven of the coins are t ...
- D - Counterfeit Dollar(第二季水)
Description Sally Jones has a dozen Voyageur silver dollars. However, only eleven of the coins are t ...
随机推荐
- 在 ThinkPHP 6 控制器中使用文件锁机制
创建锁管理类 首先,创建一个锁管理类来处理文件锁: namespace app\common\service; use Exception; class LockManager { private $ ...
- cURL 工具库基本使用
cURL(Client URL)是一个功能强大的工具和库,用于与各种网络协议进行交互,cURL常用的一些参数和示例代码: -X, --request :指定HTTP请求方法(GET.POST.PUT等 ...
- 比较LLM的function calling,Agent 和MCP
比较 对比维度 MCP(Model Context Protocol) Function Calling Agent(智能体) 定义 由 Anthropic 推出的开放协议,标准化 LLM ...
- Codeforces Round 952 (Div. 4)
知识点模块 1.一个正方体x,y,z里面可以放多少个边长为a,b,c的长方体 ans=(x-a+1)*(y-b+1)*(z-c+1) 题解模块 A.Creating Words 交换两个字母的首字母即 ...
- HTTP 分段下载
GET /user_crc.bin HTTP/1.1 Host: mnif.cn Range: bytes=0-1000
- 使用python批量爬取wallhaven.cc壁纸站壁纸
偶然发现https://wallhaven.cc/这个壁纸站的壁纸还不错,尤其是更新比较频繁,用python写个脚本爬取 点latest,按照更新先后排序,获得新地址,发现地址是分页展示的,每一页24 ...
- CF1546B题解
看了题面,一道简单的假交互题 题目传送门,另一个传送门 读好题目很重要 AquaMoon 有 nnn 个长度为 mmm 的字符串,其中 nnn 是奇数. 然后她选取 n−1n-1n−1 个字符串,将它 ...
- xshell远程连接出现WARNING! The remote SSH server rejected X11 forwarding request.
解决办法: 编辑sshd配置文件 vi /etc/ssh/sshd_config 设置 X11Forwarding yes UserLogin no //原本的注释解开 yum install -y ...
- 【ROS】5.1 ARP攻击Turtlebot3汉堡Burger并解析移动报文
原视频 ARP攻击 实验环境推荐:Linux虚拟机×2:Ubuntu 20.04或18.04或kali,被攻击机安装好ROS: 提升能力环境推荐:不同真机下的Linux虚拟机×2:Ubuntu 20. ...
- 【HUST】网络攻防实践|6_物联网设备固件安全实验|实验三 FreeRTOS-MPU 保护绕过
文章目录 实验三 FreeRTOS-MPU 保护绕过 实验要求 子任务1 逆向分析StartFreeRTOS 打印 Flag 函数名称和地址 用于提权的函数名称和地址 填写的代码 模拟运行截图 **附 ...