一、线段树优化建图
- [x] CF786B Legacy
- [x] P6348 [PA2011]Journeys
- [x] P3588 [POI2015] PUS
- [x] P5025 [SNOI2017]炸弹
- [x] 5029 T'ill It's Over
- [x] CF1045A Last chance
- [x] F793G Oleg and chess
二、DP练习
2.1区间DP
- [x] [POI2015]MYJ
2.2数位DP
- [x] [CF908G]New Year and Original Order
2.3树形DP
-
[x] [AGC034E] Complete Compress
-
[x] [清华集训2017] 榕树之心
2.4笛卡尔树DP
-
[x] [SP3734]PERIODNI - Periodni
-
[ ] [AGC026D]Histogram Coloring
2.5单调性优化DP
-
[x] [ICPC2017 WF]Money for Nothing
-
[x] [CF868F]Yet Another Minimization Problem
-
[ ] [USACO19FEB] Mowing Mischief P
2.6DP套DP
- [x] [BZOJ3864]Hero meet devil
- [x] [LOJ6274]数字
2.7自动机DP
-
[x] [AGC024F] Simple Subsequence Problem
-
[ ] [CF1110H]Modest Substrings
-
[x] [AGC022E] Median Replace
2.8计数类DP
- [x] [AGC024F] Simple Subsequence Problem
- [x] [USACO19DEC]Tree Depth P
2.9组件DP
- [ ] 摩天大楼
2.10杂题
- [ ] 某位歌姬的故事
三、矩阵加速图上问题
3.1简单路径计数
- [x] [HNOI2002]公交车路线
- [x] [TJOI2017]可乐
给定邻接矩阵(mathcal A),(mathcal A)的(k)次幂代表每个点经过(k)条边(边权为1)到达点的方案数。
上面两道题都是直接询问经过(k)条边到达某个点的方案数,直接做即可。
3.2广义矩阵乘法&优化Floyd
-
[x] [GZOI2017]河神
-
[x] [USACO07NOV]Cow Relays G
-
[x] [NOI Online #1 入门组]魔法
-
[x] [POI2010]CHO-Hamsters
若 (otimes)运算满足交换律、结合律,且(otimes)对(oplus)存在分配律,即存在(left(igoplus a ight)otimes b = igoplus left( aotimes b ight)) 时,广义矩阵乘法满足结合律。
有了广义矩阵乘法,我们就可以对各类二元运算进行快速幂运算,其中最典型的应用是用来优化Floyd。
需要注意的是,与(mathtt{3.1})不同,我们现在需要将边权放进矩阵里参与运算。
3.3处理技巧
3.3.1拆点
- [x] [SCOI2009] 迷路
如果边有边权,我们可以考虑拆点,将每个点依据出边的边权不同拆成不同状态的点,不同状态的点之间由对应边权小的向边权大的连边。
3.3.2点边互换
- [x] [SDOI2009]HH去散步
这道题不能立刻走回头路。
我们把所有有向边看做点(无向边转两条有向边),并连出一些边。两条边代表的点连起来,当且仅当一条边的终点为另一条边的起点。这样经过连边之后会形成一个有向图。(s)到(t)的路径长度为在这张图上表现为:射出的边在图中的所有结点到射向的所有边在图中的所有结点之间的路径长度为(k-1)。(引用自博客)
我们只需要把一条边代表的两个点之间的点去掉就可以保证不走回头了。
3.3.3周期分组快速幂
- [x] [ZJOI2005]沼泽鳄鱼
- [x] P3821 Isaac
对于不同时刻矩阵(mathcal A)的状态不同但是有周期性时,我们可以令(mathcal{T}=prod{mathcal{A_i}}),我们对矩阵(mathcal{T})做快速幂,对于余数暴力处理即可。
3.3.4倍增预处理,按时间顺序统计
- [x] [NOI Online #3 提高组]魔法值
当一道题目需要多次询问时,如果我们对于每个询问都用(O(n^3log T))的时间处理的话是一个不小的开销。
观察到我们需要的值通常只有矩阵的第一行,我们可以倍增预处理出各个时刻矩阵第一行的值,这样每个询问我们都可用(O(n^2log T))的时间处理(因为参与相乘的答案矩阵只有1行,省掉了一维)。
3.3.5bitset优化
- [x] CF576D Flights for Regular Customers
如果我们最终只需要知道矩阵中某个元素是否为(0),而不关心它矩阵的值,我们可以用bitset进行优化,使得单次矩阵乘法的复杂度优化为(O(frac{n^3}{w}))
3.4综合应用
- [x] [NOI2020]美食家
有了系统的学习,这道题的思路就很清晰了:拆点+广义矩阵乘法+倍增预处理,按时间顺序统计。
要是没学过直接上场的话,估计就直接跪了。。。
四、虚树
- [x] [SDOI2011]消耗战
- [x] [CF613D]Kingdom and its Cities
- [x] [HEOI2014]大工程
- [x] [HNOI2014]世界树
- [x] [BZOJ3879]SvT