矩阵优化做题简单分类

矩阵优化简单总结

拆点技巧

有些题目中边有长度,但不会太长,如果对于每条边都拆成长度个点的话由于边会太多,导致时间复杂度会爆炸,所以只能拆点,将一个点拆成变成个点,一个点内部连长度为 1 的边。

例题:P4159 [SCOI2009] 迷路P6772 [NOI2020] 美食家

点边互换技巧

有些题目不能走上次走过的边,但是矩阵相乘的时候并不知道上次是走的是什么边,只知道上次经过的是哪一个点,所以可以把边和点的角色互换一下,达到不能走回头路的限制。

例题:P2151 [SDOI2009]HH去散步

分段处理技巧

有些题目中会给你一些特殊时间(个数不会太多),满足在这个事件前后边或点的状态是不一样的,或者在这个时间点会获得一些特殊贡献。这种情况我们就不能忽略这个分界点。所以我们可以在分界点和分界点之间用矩阵加速,分界点处特殊处理。

例题:Flights for Regular CustomersP6772 [NOI2020] 美食家

周期处理技巧

类似于分段处理,只不过这种情况特殊时间的个数太多了,不能枚举,但是特殊时间是循环的,有周期性的。这样我们可以整个整个周期的加速,最后把零头给补一下。

例题:P2579 [ZJOI2005]沼泽鳄鱼P2579 [ZJOI2005]沼泽鳄鱼

二进制拆分技巧

常常和分段处理技巧一块用。矩阵和矩阵相乘是 \(O(n^3)\) ,而向量乘矩阵是 \(O(n^2)\) 的,有些题目会让你把一个状态多次和矩阵相乘,这样每次相乘都是 \(O(n^3\log T)\) 的。总时间就是 \(O(mn^3\log T)\) 的,\(m\) 是相乘次数会 TLE。但是我们可以把矩阵的二的整数次幂预处理出来,每次用这个状态乘上它们,这样时间就是 \(O(n^3+mn^2\log T)\) 的了。例如 P6772 [NOI2020] 美食家 ,你就可以在处理过关键点之后用这个技巧跳到下一个关键点。

例题:P6569 [NOI Online #3 提高组] 魔法值P6772 [NOI2020] 美食家

广义矩阵

上述情况大多都是求,从 S 到 T 的方案数。有些题目是求从 S 到 T 的最短距离,这种递推式可以用 Floyd 的式子,也是满足结合律的,但由于本人太功利了,并不会证明。还有些题目是和异或操作相关的,这显然满足结合律,可以用矩阵加速。这样的矩阵称作 广义矩阵。

例题:[USACO07NOV]Cow Relays GP6569 [NOI Online #3 提高组] 魔法值P6772 [NOI2020] 美食家[NOI Online #1 入门组] 魔法P3502 [POI2010]CHO-Hamsters

发现???

会发现 P6772 [NOI2020] 美食家 这一题覆盖了大多数技巧,是一道非常好的矩阵优化题目。

标签&简单题解

1.HNOI2002]公交车路线

这个题非常裸,n 只有八矩阵就是你指向你两边,注意 E 只能指向自己。

2.P4159 [SCOI2009] 迷路

这一题用到了拆点的技巧,也非常裸。

3.P2151 [SDOI2009]HH去散步

这个题就有点意思了,不能经过上次经过的边,可以考虑把边换成点,一正一反。

4.Flights for Regular Customers

这个题的做法有点类似 P6772 [NOI2020] 美食家,都是从小到大枚举一个节日或时间啥的,这个时间段前后要特殊处理一下,本题就是统计这个时间之前能到达的点,并且在这个时间之后解锁一条边。

5.P2579 [ZJOI2005]沼泽鳄鱼

注意 lcm(2,3,4)=12 所以我们可以把一个点拆成12个,然后分成12种时间建图。先把整块12的跑掉,再跑零头。

6.[USACO07NOV]Cow Relays G

广义矩阵,将 \(+\) 改为 min ,\(\times\) 改为 \(+\) 即可,类似于 Floyd。

7.P6569 [NOI Online #3 提高组] 魔法值

广义矩阵,此题用到了技巧 向量乘矩阵是 \(O(n^2)\),可以先预处理出矩阵的幂次,对于每个向量能 \(O(n^2\log n)\) 计算而非 \(O(n^3\log n)\)

8.P6772 [NOI2020] 美食家

广义矩阵,这个题的做法有点类似 Flights for Regular Customers,都是从小到大枚举一个节日或时间啥的,这个时间段前后要特殊处理一下,本题就是在美食节当天给这个位置的收获加上贡献,之后在用矩阵加速,说白了就是两个特殊时间矩阵加速,特殊时间特殊处理。

9.P5789 [TJOI2017]可乐(数据加强版)

硬要说的话和 P2233 [HNOI2002]公交车路线) 有点像,但是这一题在每个时间都可以停止,那一题是在一个位置可以停止,对于这种可以随时停止的需要再开一个节点记录答案,如果想停止,直接走向新开的节点。

10.[NOI Online #1 入门组] 魔法

广义矩阵,先做一遍 Floyd ,考虑从 i 到 j 翻转一次的最小值,胡乱整一下,反转 \(K\) 次就行了,细节有点多。

11.P3502 [POI2010]CHO-Hamsters

没用矩阵,但这一题和 [USACO07NOV]Cow Relays G 几乎一模一样,🕊️

12.P3821 Isaac

P2579 [ZJOI2005]沼泽鳄鱼 真是一模不一样,改成广义的就行了,将 \(+\) 改为 min ,\(\times\) 改为 max 即可。

13.P5678 [GZOI2017]河神

woc,终于有一个和图无关的了(好像 P3502 [POI2010]CHO-Hamsters 也无关,但它和 [USACO07NOV]Cow Relays G 几乎一模一样,所以也有关),而这种 矩阵优化加速递推需要记录你这个位置前 \(K\) 个 a ,通过 \(K\) 个 b 转移 \(n\) 次,每次转移的递推式一模一样,而且能发现,这个式子是又结合律的,所以可以通过矩阵优化加速递推,一般来说,有结合律的东西都可以这样加速。

posted @ 2021-05-24 21:43  zYzYzYzYz  阅读(142)  评论(0编辑  收藏  举报