待补 重要思考:求给无向图定向使得其变为DAG的方案数
今天比赛考到了,不会,丢了 100 分。
rk2,380 -> rk15,280
别问为什么 T4 没过,因为不会 T2。
方法一 \(O(3^n)\)
令 \(f_S\) 为子集 \(S\) 内定向得到 DAG 的方案。
\(f_S = \sum\limits_{\emptyset \not= T\subset S, \text{T 为独立集}} (-1)^{|T| - 1}f_{S - T}\)
考虑 DAG 的分解构造过程,可以将其分为出/入度等于 \(0\) 的最大点集,删除/剥离一层继续这样,考虑逆向构造 DAG,但是发现存在重复计数,可以采用容斥,对于非空点集 \(T\),容斥系数为 \((-1)^{|T| - 1}\)。
关于容斥系数:有机会总结一下。关于本题,设 \(T\) 的计算容斥系数为 \(g(T)\),而真实容斥系数为 \(1\),根据计算方式,大的会被每个小的计算一次(有些时候是有关组合数的系数,但这里根据定义和公式是 \(1\) 次),于是有 \(\forall S, \sum\limits_{T\subset S}g(T) = 1\)
可以构造 \(g(T) = (-1)^{|T| - 1}\)
枚举子集复杂度 \(O(3^n)\)。考虑是不是可以 \(O(3^n)\) 求得容斥系数?
code
const int N = 20;
const int mod = 1e9 + 7;
int n, m;
int to[N];
int f[1 << N], g[1 << N];
inline void qadd(int &a, int b) {
a += b;
if (a >= mod) a -= mod;
}
void calc() {
read(n, m);
rep (i, 1, m) {
int a, b; read(a, b);
--a; --b;
to[a] |= 1 << b;
to[b] |= 1 << a;
}
g[0] = 1;
rep (s, 1, (1 << n) - 1) {
rep (j, 0, n - 1) {
if (s >> j & 1) {
g[s] = g[s ^ (1 << j)] & ((s & to[j]) == 0);
break;
}
}
}
f[0] = 1;
rep (s, 1, (1 << n) - 1) {
for (int t = s; t; t = (t - 1) & s) {
if (g[t] && f[s ^ t]) {
if (__builtin_popcount(t) & 1) qadd(f[s], f[s ^ t]);
else qadd(f[s], mod - f[s ^ t]);
}
}
}
write(f[(1 << n) - 1]);
}
方法二 \(O(n^22^n)\)
貌似子集卷积,记得补
待补 重要思考:求给无向图定向使得其变为DAG的方案数的更多相关文章
- poj 3734 方块涂色 求红色 绿色方块都为偶数的方案数 (矩阵快速幂)
N个方块排成一列 用红,蓝,绿,黄4种颜色去涂色,求红色方块 和绿色方块个数同时为偶数的 方案数 对10007取余 Sample Input 212Sample Output 2//(蓝,黄)6//( ...
- 33、求按从小到大的顺序的第N个丑数
一.题目 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 二.解法 ...
- P1466 集合 Subset Sums(01背包求填充方案数)
题目链接:https://www.luogu.org/problem/show?pid=1466 题目大意:对于从1到N (1 <= N <= 39) 的连续整数集合,能划分成两个子集合, ...
- P1474 货币系统 Money Systems(完全背包求填充方案数)
题目链接:https://www.luogu.org/problemnew/show/1474 题目大意:有V种货币,求用V种货币凑出面值N有多少种方案. 解题思路:就是完全背包问题,只是将求最大价值 ...
- poj3254 Corn Fields 利用状态压缩求方案数;
Corn Fields 2015-11-25 13:42:33 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10658 ...
- Codeforces 509F Progress Monitoring:区间dp【根据遍历顺序求树的方案数】
题目链接:http://codeforces.com/problemset/problem/509/F 题意: 告诉你遍历一棵树的方法,以及遍历节点的顺序a[i],长度为n. 问你这棵树有多少种可能的 ...
- CF 149D Coloring Brackets(区间DP,好题,给配对的括号上色,求上色方案数,限制条件多,dp四维)
1.http://codeforces.com/problemset/problem/149/D 2.题目大意 给一个给定括号序列,给该括号上色,上色有三个要求 1.只有三种上色方案,不上色,上红色, ...
- 剑指offer33:求按从小到大的顺序的第N个丑数。
1 题目描述 把只包含质因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含质因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 2 ...
- C语言:求n(n<10000)以内的所有四叶玫瑰数。-将字符串s1和s2合并形成新的字符串s3,先取出1的第一个字符放入3,再取出2的第一个字符放入3,
//函数fun功能:求n(n<10000)以内的所有四叶玫瑰数并逐个存放到result所指数组中,个数作为返回值.如果一个4位整数等于其各个位数字的4次方之和,则称该数为函数返回值. #incl ...
- C语言:找出一个大于给定整数m且紧随m的素数,-求出能整除x且不是偶数的数的个数,
//函数fun功能:找出一个大于给定整数m且紧随m的素数,并作为函数值返回. #include <stdlib.h> #include <conio.h> #include & ...
随机推荐
- Mybatis ResultMap复杂对象一对一查询结果映射之association
Mybatis复杂对象映射配置ResultMap的association association:映射到POJO的某个复杂类型属性,比如订单order对象里面包含user对象 表结构 项目结构 pom ...
- vue中使用xlsx导出excel文件
俗话说,前人栽树,后人乘凉,感谢强人封装好的xlsx,直接使用就可以了.这是网上找到的,也不知道原作者是不是这位博主,先贴出来吧: https://www.cnblogs.com/boylxx/p/1 ...
- 我用Awesome-Graphs看论文:解读PowerGraph
PowerGraph论文:<PowerGraph: Distributed Graph-Parallel Computation on Natural Graphs> 上次通过文章< ...
- PHP转Go系列 | Carbon 时间处理工具的使用姿势
大家好,我是码农先森. 在日常的开发过程中经常会遇到对时间的处理,比如将时间戳进行格式化.获取昨天或上周或上个月的时间.基于当前时间进行加减等场景的使用.在 PHP 语言中有一个针对时间处理的原生函数 ...
- 【Mybatis + Spring】 Mybatis - Spring 结合
环境搭建 EvBuild 软件环境准备 - MySQL 5.0 + - IDEA 2018 + - JDK1.8 + 依赖包相关 - Junit单元测试 - JDBC驱动 - Mybatis 组件 - ...
- 【Windows】更改Win10字体和Cmd字体
教程参考: https://www.windowszj.com/news/20837.html Win + R 打开运行窗口 输入 regedit 打开注册表编辑窗口 位置地址: 计算机\HKEY_L ...
- 【Spring】07 后续的学习补充 vol1
控制反转Inverse Of Control的演变: 在之前的原生Javaweb项目的问题: 我们三层架构每一层之间的联系是这样的: 由GradeDao接口指向GradeDaoImpl 再由Grade ...
- 【Layui】12 评分 Rate
文档地址: https://www.layui.com/demo/rate.html 基础样式: <fieldset class="layui-elem-field layui-fie ...
- NVIDIA的ROS项目 —— Isaac ROS
文档地址: https://nvidia-isaac-ros.github.io/index.html Github地址: https://github.com/NVIDIA-ISAAC-ROS
- 灵巧手 —— 智能仿生手 —— 人形机器人(humanoid)
产品主页: https://www.brainco.cn/#/product/brain-robotics 国内销售的一款产品,美国华人生产的,灵巧度非常高的一款仿生手产品.