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\) 个格子的棋盘上进行.在游戏的一开始,最 ...
随机推荐
- style="word-break: break-all;" 用于 对应 td 文本内容过长自适应换行适用
style="word-break: break-all;" 用于 对应 td 文本内容过长自适应换行适用 <td style="word-break: break ...
- CodeWF.EventBus:轻量级事件总线,让通信更流畅
1. CodeWF.EventBus EventBus(事件总线),用于解耦模块之间的通讯.本库(CodeWF.EventBus)适用于进程内消息传递(无其他外部依赖),与大家普遍使用的MediatR ...
- SparkSQL练习:对学生选课成绩进行分析计算
题目内容: 对学生选课成绩进行分析计算 题目要求: (1)该系总共有多少学生: (2)该系共开设来多少门课程: (3)每个学生的总成绩多少: (4)每门课程选修的同学人数: (5)每位同学选修的课程门 ...
- Mellanox hp 544+FLR QSFP 40G 网卡升级固件及性能测试
烧录命令参考视频: 相关视频: https://www.youtube.com/watch?v=_2-qPV1giEc flint -allow_psid_change -d /dev/mst/mt4 ...
- 『玩转Streamlit』--交互类组件
交互类组件在Web应用程序中至关重要,它们允许用户与应用进行实时互动,能够显著提升用户体验. 用户不再只是被动地接收信息,而是可以主动地输入数据.做出选择或触发事件,从而更加深入地参与到应用中来. 此 ...
- The 2024 ICPC Asia East Continent Online Contest (I) G
Link: The Median of the Median of the Median 考虑二分答案,对中位数进行二分,每次去判断是否比中位数大即可. 我们钦定了一个中位数 \(x\),对于 \(\ ...
- Python 潮流周刊#78:async/await 是糟糕的设计(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- Java里快如闪电的线程间通讯
这个故事源自一个很简单的想法:创建一个对开发人员友好的.简单轻量的线程间通讯框架,完全不用锁.同步器.信号量.等待和通知,在Java里开发一个轻量.无锁的线程内通讯框架:并且也没有队列.消息.事件或任 ...
- Git之配置多SSH-KEY
现存账号类型: gitee账号,国产github,码云值得拥有 github账号,全球最大同性交友网站 gitlab账号,公司内部的工作开发 解决方案 解决办法很简单,新建一个config文件就可以了 ...
- oracle中id自增长(转)
首先,你要有一张表! CREATE TABLE example( ID Number(4) NOT NULL PRIMARY KEY, NAME VARCHAR(25), PHONE VARCHAR( ...