题解:P10061 [SNOI2024] 矩阵

· · 题解

题解

提供一种不需要打旋转标记的做法。

考虑给每一个节点标号后连边,形成四连通无向图,边权表示相邻节点的权值差。

为了定位图中的一个点,我们需要有一些不动点作为参考坐标,那么可以在网格最外层维护一圈不动点,每次从边缘径直走向中心。

问题变成如何在旋转后走直线?

延续上面不动点的思想,我们如果能找到一些参考系就好了。

那不如还用之前选的最外层的不动点

我们知道旋转后连边的相对位置不会改变,也就是相对的方向还会是相对的,顺时针、逆时针相邻的边也不会变。

我们又知道起点是不变的,那就能找到起点相对当前点的方向,然后以来时的起点作为参考系,考虑向哪个方向旋转。相当于每走一步回头看看来时的路,温故而知新。

这时你已经可以在混乱的图中任意的行走了,那么矩形加是容易,改变矩形最外层的边权就行了。

然后就是矩形旋转,其实就是改变连边。

仍然是只和矩形最外层有关,双指针指向要修改的两个点(绿边连的黑点),然后连就行了(需要提前备份一份)。

边权的改变其实就是黄色路径的权值和,在双指针移动的时候顺便维护是容易的。

建议一开始多写函数,等到你 T 了再展开。

AC record

思路来自 Ifxxx。