\(\mathscr A\sim\)「OurOJ #47030」_

  Link & Submission & Tags:「A.DP-计数 DP」「A.数学-Stirling 数/反演」「B.Tricks」

  我们习惯于用组合数拆形如 \(l^k\) 的贡献,可惜 \(\mathcal O(nk^2)\) 的复杂度不被允许。我们需要找到更优秀的贡献拆分方法。

  关于幂,可以想到 Stirling 反演。考虑

\[l^k=\sum_{i=0}^k{k\brace i}l^{\underline i},
\]

其中 \(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」浅写的更多相关文章

  1. 「NowCoder Contest 295」H. Playing games

    还是见的题太少了 「NowCoder Contest 295」H. Playing games 题意:选出尽量多的数使得异或和为$ 0$ $ Solution:$ 问题等价于选出尽量少的数使得异或和为 ...

  2. Note -「圆方树」学习笔记

    目录 圆方树的定义 圆方树的构造 实现 细节 圆方树的运用 「BZOJ 3331」压力 「洛谷 P4320」道路相遇 「APIO 2018」「洛谷 P4630」铁人两项 「CF 487E」Touris ...

  3. 「COCI2016/2017 Contest #2」Bruza

    「COCI2016/2017 Contest #2」Bruza 解题思路 : 首先对于任意时刻 \(i\) ,硬币一定移动到了深度为 \(i\) 的节点,所以第 \(i\) 时刻 Danel 一定染掉 ...

  4. Diary / Solution Set -「WC 2022」线上冬眠做噩梦

      大概只有比较有意思又不过分超出能力范围的题叭.   可是兔子的"能力范围" \(=\varnothing\) qwq. 「CF 1267G」Game Relics   任意一个 ...

  5. LOJ6003 - 「网络流 24 题」魔术球

    原题链接 Description 假设有根柱子,现要按下述规则在这根柱子中依次放入编号为的球. 每次只能在某根柱子的最上面放球. 在同一根柱子中,任何2个相邻球的编号之和为完全平方数. 试设计一个算法 ...

  6. LOJ6002 - 「网络流 24 题」最小路径覆盖

    原题链接 Description 求一个DAG的最小路径覆盖,并输出一种方案. Solution 模板题啦~ Code //「网络流 24 题」最小路径覆盖 #include <cstdio&g ...

  7. LOJ6001 - 「网络流 24 题」太空飞行计划

    原题链接 Description 有个实验和个仪器,做实验有报酬买仪器有花费.每个实验都需要一些仪器,求最大净收益(实验报酬仪器花费),并输出一组方案. Solution 实验向所需仪器连边,实验的点 ...

  8. Libre 6006 「网络流 24 题」试题库 / Luogu 2763 试题库问题 (网络流,最大流)

    Libre 6006 「网络流 24 题」试题库 / Luogu 2763 试题库问题 (网络流,最大流) Description 问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同 ...

  9. loj #6122. 「网络流 24 题」航空路线问题

    #6122. 「网络流 24 题」航空路线问题 题目描述 给定一张航空图,图中顶点代表城市,边代表两个城市间的直通航线.现要求找出一条满足下述限制条件的且途经城市最多的旅行路线. 从最西端城市出发,单 ...

  10. [LOJ#2327]「清华集训 2017」福若格斯

    [LOJ#2327]「清华集训 2017」福若格斯 试题描述 小d是4xx9小游戏高手. 有一天,小d发现了一个很经典的小游戏:跳青蛙. 游戏在一个 \(5\) 个格子的棋盘上进行.在游戏的一开始,最 ...

随机推荐

  1. style="word-break: break-all;" 用于 对应 td 文本内容过长自适应换行适用

    style="word-break: break-all;" 用于 对应 td 文本内容过长自适应换行适用 <td style="word-break: break ...

  2. CodeWF.EventBus:轻量级事件总线,让通信更流畅

    1. CodeWF.EventBus EventBus(事件总线),用于解耦模块之间的通讯.本库(CodeWF.EventBus)适用于进程内消息传递(无其他外部依赖),与大家普遍使用的MediatR ...

  3. SparkSQL练习:对学生选课成绩进行分析计算

    题目内容: 对学生选课成绩进行分析计算 题目要求: (1)该系总共有多少学生: (2)该系共开设来多少门课程: (3)每个学生的总成绩多少: (4)每门课程选修的同学人数: (5)每位同学选修的课程门 ...

  4. Mellanox hp 544+FLR QSFP 40G 网卡升级固件及性能测试

    烧录命令参考视频: 相关视频: https://www.youtube.com/watch?v=_2-qPV1giEc flint -allow_psid_change -d /dev/mst/mt4 ...

  5. 『玩转Streamlit』--交互类组件

    交互类组件在Web应用程序中至关重要,它们允许用户与应用进行实时互动,能够显著提升用户体验. 用户不再只是被动地接收信息,而是可以主动地输入数据.做出选择或触发事件,从而更加深入地参与到应用中来. 此 ...

  6. The 2024 ICPC Asia East Continent Online Contest (I) G

    Link: The Median of the Median of the Median 考虑二分答案,对中位数进行二分,每次去判断是否比中位数大即可. 我们钦定了一个中位数 \(x\),对于 \(\ ...

  7. Python 潮流周刊#78:async/await 是糟糕的设计(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...

  8. Java里快如闪电的线程间通讯

    这个故事源自一个很简单的想法:创建一个对开发人员友好的.简单轻量的线程间通讯框架,完全不用锁.同步器.信号量.等待和通知,在Java里开发一个轻量.无锁的线程内通讯框架:并且也没有队列.消息.事件或任 ...

  9. Git之配置多SSH-KEY

    现存账号类型: gitee账号,国产github,码云值得拥有 github账号,全球最大同性交友网站 gitlab账号,公司内部的工作开发 解决方案 解决办法很简单,新建一个config文件就可以了 ...

  10. oracle中id自增长(转)

    首先,你要有一张表! CREATE TABLE example( ID Number(4) NOT NULL PRIMARY KEY, NAME VARCHAR(25), PHONE VARCHAR( ...