\(\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. Java 面向对象高级

    文章目录 1.静态 1.1 static修饰成员变量 1.2 static修饰成员变量的应用场景 1.3 static修饰成员方法 1.4 工具类 1.5 static的注意事项 1.6 static ...

  2. Java面试题中高级进阶(JVM篇Java垃圾回收)

    前言 本来想着给自己放松一下,刷刷博客,突然被几道面试题难倒!说说Java对象创建过程?知道类的生命周期吗?简述Java的对象结构?如何判断对象可以被回收?JVM的永久代中会发生垃圾回收么?你知道哪些 ...

  3. ATC:多快好省,无参数token reduction方法 | ECCV'24

    来源:晓飞的算法工程笔记 公众号,转载请注明出处 论文: Agglomerative Token Clustering 论文地址:https://arxiv.org/abs/2409.11923 论文 ...

  4. 对于特定的游戏问题使用启发式算法可以取得比AI算法更好的表现

    相关: Using A.I. to DOMINATE NERDS in TETRIS 有些问题的求解可以通过建模将其转换为强化学习问题,然后再使用强化学习算法对其进行求解,但是很多问题如果不建模为强化 ...

  5. Reviewbot 开源 | 为什么我们要打造自己的代码审查服务?

    Reviewbot 是七牛云开源的一个项目,旨在提供一个自托管的代码审查服务, 方便做 code review/静态检查, 以及自定义工程规范的落地. 静态检查不是个新鲜事. 我记得早在几年前,我们就 ...

  6. 23.Kubernetes中的CRI

    Kubernetes中的CRI 前言 Kubernetes 节点的底层由一个叫做容器运行时的软件进行支撑,它主要负责启停容器. Docker 是目前最广为人知的容器运行时软件,但是它并非唯一.在这几年 ...

  7. QOJ 5020. 举办乘凉州喵,举办乘凉州谢谢喵

    QOJ 5020. 举办乘凉州喵,举办乘凉州谢谢喵 飞天数据结构. 思路 设 \(f[u][k]\) 为 \(u\) 子树内距离 \(u\) 小于等于 \(k\) 的点的个数,\(g[u][k]\) ...

  8. 使用YARP来实现负载均衡

    YARP ("Yet Another Reverse Proxy") 是一个库,可帮助创建高性能.生产就绪且高度可自定义的反向代理服务器. YARP 是使用 ASP.NET 和 . ...

  9. golang之常用方法/函数

    1. io.Reader转化为字符串, byte切片 import "bytes" func StreamToByte(stream io.Reader) []byte { buf ...

  10. pycharm之debugger使用

    1.未打断点运程序,输出全部结果 2.打断点后,点击debug,代码执行到断点前停止(断点所在行不执行) 3.step over,是在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子 ...