题解:P10061 [SNOI2024] 矩阵
题解
提供一种不需要打旋转标记的做法。
考虑给每一个节点标号后连边,形成四连通无向图,边权表示相邻节点的权值差。
为了定位图中的一个点,我们需要有一些不动点作为参考坐标,那么可以在网格最外层维护一圈不动点,每次从边缘径直走向中心。
问题变成如何在旋转后走直线?
延续上面不动点的思想,我们如果能找到一些参考系就好了。
那不如还用之前选的最外层的不动点?
我们知道旋转后连边的相对位置不会改变,也就是相对的方向还会是相对的,顺时针、逆时针相邻的边也不会变。
我们又知道起点是不变的,那就能找到起点相对当前点的方向,然后以来时的起点作为参考系,考虑向哪个方向旋转。相当于每走一步回头看看来时的路,温故而知新。
这时你已经可以在混乱的图中任意的行走了,那么矩形加是容易,改变矩形最外层的边权就行了。
然后就是矩形旋转,其实就是改变连边。
仍然是只和矩形最外层有关,双指针指向要修改的两个点(绿边连的黑点),然后连就行了(需要提前备份一份)。
边权的改变其实就是黄色路径的权值和,在双指针移动的时候顺便维护是容易的。
建议一开始多写函数,等到你 T 了再展开。
AC record
思路来自 Ifxxx。