Solution Set -「OurOJ Contest #2587」浅写
\(\mathscr A\sim\)「OurOJ #47030」_
Link & Submission & Tags:「A.DP-计数 DP」「A.数学-Stirling 数/反演」「B.Tricks」
我们习惯于用组合数拆形如 \(l^k\) 的贡献,可惜 \(\mathcal O(nk^2)\) 的复杂度不被允许。我们需要找到更优秀的贡献拆分方法。
关于幂,可以想到 Stirling 反演。考虑
\]
其中 \(l^{\underline i}\) 看上去并不好维护,但是它有一个很简单的组合意义:从走过的 \(l\) 条边里有序地选出 \(i\) 条的方案数。除一个 \(i!\),那就是 \(\binom{l}{i}\),即无序地选出 \(i\) 条边的方案数。我们对这个计数问题暴力 DP,令 \(f(u,i)\) 表示从 \(1\) 走到 \(u\),已经在路径上选了 \(i\) 条边的方案数。\(\mathcal O(nk)\) 转移就行。
\(\mathscr B\sim\)「OurOJ #47031」__
Link & Submission & Tag:「A.数据结构-树套树」
“至少出现一次”,可以尝试直接不重不漏地进行加法贡献。那么当 \(u\) 的颜色变为 \(c\) 时,所有 \(u\) 的祖先中,子树内以前没有 \(c\) 颜色的结点都会受 \(u\) 贡献;当 \(u\) 的颜色从 \(c\) 改变时亦有类似讨论。用 set 维护一下每种颜色出现的 DFN,可以倍增求出最高的满足要求的 \(u\) 的祖先 \(v\)。
然后呢?BIT 套线段树差分维护“\(u\) 到 \(v\) 的数量上每个点答案的 \(c\) 位置 \(\pm1\)”,\(\mathcal O((n+q)\log^2n)\),不卡常。
\(\mathscr C\sim\)「OurOJ #47031」___ *
Link & Submission & Tags:「A.DP-状压/插头 DP」「C.性质/结论」
条件的转化很关键,不要一味按照题目描述的顺序思考,例如本题,可以想想,如果先把所有权值随机出来,我们能得到多少种点分树?
——只有唯一一棵!每次分治区域内的最小值位置需保证唯一,这个点就是当前分治中心,依此递归构造,一种点权方案要不非法,要不只能由一种点分树生成。
进一步,怎样才能保证最小值位置唯一?——对于任意两个权值相同的结点,它们的树上路径中必须存在权值更小的结点。可见这是合法的充要条件。
接下来的求解就平凡了。令 \(f(u,S)\) 表示 \(u\) 子树内,能从对应点出发,仅经过权值不小于自己的结点,走到 \(u\) 以上的权值集合为 \(S\),暴力转移可做到 \(\mathcal O(n3^k)\)。
然后,如你所见,极其卡常。给一些我加的优化叭。
实现层面,不要用任何辅助数组。注意贡献形式是,当 \(S\cap T=\varnothing\) 且 \(S\) 的最高 bit 不在 \(T\) 中时,\(f(u,S)\times f(v,T)\rightarrow f(u,\{x\mid x\le \operatorname{high}(S)\land(x\in S\lor x\in T)\})\)。从大到小枚举 \(S\),同步在 \(f(v)\) 上滚类似后缀和的东西即可。
卡常技巧:
指针存一下二维状态的第一维,保证瓶颈处只有一维数组访问;
虽然不知道效果明不明显,也不知道科不科学:DP 的第二维不要恰好开成 \(2^k\),这样很浪费 cache line;
#pragma GCC optimize("Ofast")
#pragma GCC target("avx, avx2, mmx, sse, sse2, sse3, sse4, ssse3")
最后,值得一提的是,\(f\) 的转移可以表示为一定条件下的集合卷积,至少可以无脑优化至 \(\mathcal O(nk^32^k)\),理论层面比较优秀,但是算出来巨大,标算没采用这种做法可以理解。另一方面,完整的贡献形式并不是位运算卷积,所以可能很难用类 FWT 的思路取得更好优化效果。
Solution Set -「OurOJ Contest #2587」浅写的更多相关文章
- 「NowCoder Contest 295」H. Playing games
还是见的题太少了 「NowCoder Contest 295」H. Playing games 题意:选出尽量多的数使得异或和为$ 0$ $ Solution:$ 问题等价于选出尽量少的数使得异或和为 ...
- Note -「圆方树」学习笔记
目录 圆方树的定义 圆方树的构造 实现 细节 圆方树的运用 「BZOJ 3331」压力 「洛谷 P4320」道路相遇 「APIO 2018」「洛谷 P4630」铁人两项 「CF 487E」Touris ...
- 「COCI2016/2017 Contest #2」Bruza
「COCI2016/2017 Contest #2」Bruza 解题思路 : 首先对于任意时刻 \(i\) ,硬币一定移动到了深度为 \(i\) 的节点,所以第 \(i\) 时刻 Danel 一定染掉 ...
- Diary / Solution Set -「WC 2022」线上冬眠做噩梦
大概只有比较有意思又不过分超出能力范围的题叭. 可是兔子的"能力范围" \(=\varnothing\) qwq. 「CF 1267G」Game Relics 任意一个 ...
- LOJ6003 - 「网络流 24 题」魔术球
原题链接 Description 假设有根柱子,现要按下述规则在这根柱子中依次放入编号为的球. 每次只能在某根柱子的最上面放球. 在同一根柱子中,任何2个相邻球的编号之和为完全平方数. 试设计一个算法 ...
- LOJ6002 - 「网络流 24 题」最小路径覆盖
原题链接 Description 求一个DAG的最小路径覆盖,并输出一种方案. Solution 模板题啦~ Code //「网络流 24 题」最小路径覆盖 #include <cstdio&g ...
- LOJ6001 - 「网络流 24 题」太空飞行计划
原题链接 Description 有个实验和个仪器,做实验有报酬买仪器有花费.每个实验都需要一些仪器,求最大净收益(实验报酬仪器花费),并输出一组方案. Solution 实验向所需仪器连边,实验的点 ...
- Libre 6006 「网络流 24 题」试题库 / Luogu 2763 试题库问题 (网络流,最大流)
Libre 6006 「网络流 24 题」试题库 / Luogu 2763 试题库问题 (网络流,最大流) Description 问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同 ...
- loj #6122. 「网络流 24 题」航空路线问题
#6122. 「网络流 24 题」航空路线问题 题目描述 给定一张航空图,图中顶点代表城市,边代表两个城市间的直通航线.现要求找出一条满足下述限制条件的且途经城市最多的旅行路线. 从最西端城市出发,单 ...
- [LOJ#2327]「清华集训 2017」福若格斯
[LOJ#2327]「清华集训 2017」福若格斯 试题描述 小d是4xx9小游戏高手. 有一天,小d发现了一个很经典的小游戏:跳青蛙. 游戏在一个 \(5\) 个格子的棋盘上进行.在游戏的一开始,最 ...
随机推荐
- C:二进制向十进制变换
#include<stdio.h> int main() { char z[66]; scanf("%s",z); unsigned long long sum=0; ...
- IDEA 2024.2.2 最新安装教程(附激活-2099年~)
访问 IDEA 官网 下载 IDEA 2024.2.2 版本的安装包. 下载补丁https://pan.quark.cn/s/fcc23ab8cadf 检查 进入 IDEA 中后,点击菜单 Help ...
- 看图认识HTML5
教程: https://www.w3.org/TR/html52 https://www.w3cschool.cn/html5/ https://www.runoob.com/html/html5-i ...
- Linux系统压力测试工具(命令行工具)
Linux的命令行压力测试工具在做基准测试时很有用,通过基准测试对了解一个系统所能达到的最大性能指标,这些指标可以作为后续性能比较.优化评估的参考依据. 模拟CPU压力: 可以使用stress命令使C ...
- 基于Java+SpringBoot+Mysql实现的古诗词平台功能设计与实现八
一.前言介绍: 1.1 项目摘要 随着信息技术的迅猛发展和数字化时代的到来,传统文化与现代科技的融合已成为一种趋势.古诗词作为中华民族的文化瑰宝,具有深厚的历史底蕴和独特的艺术魅力.然而,在现代社会中 ...
- Code::Blocks C语言新手教学
## 简介 C语言是一种广泛应用于系统编程和底层开发的编程语言.它是一种结构化的.面向过程的语言,具有高效的性能和灵活的编程风格.在学习C语言时,通常会使用一些集成开发环境(IDE)来编写.编译和运行 ...
- mysql - 修改字段名称 & 修改字段数据类型
修改字段名称: ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <新数据类型>: mysql> ALTER TABLE ...
- pycharm里的jinja2注释问题
pycharm里html注释是{# #}而不是<!-- -->? 修改方式:如图修改成值None以后,command+/快捷键,html注释的符号就是<!-- 注释内容 --&g ...
- dotnet学习笔记-专题03-RabbitMQ-01
专题03--RabbitMQ 1. RabbitMQ安装 服务端 使用如下sh脚本安装: #!/bin/sh sudo apt-get install curl gnupg apt-transport ...
- 移动端PDF阅读器重排版效果对比-小白PDF阅读器与KOReader重排效果对比
PDF是一种跨操作系统平台的电子文件格式,它能在各种不同的平台上以相同的版式显示.很多扫描书籍或者电子书籍都会采用PDF格式存储.但是移动端由于屏幕的限制,以原版展示PDF会导致画面缩放严重,影响阅读 ...