7.19 线性代数
听完课感觉会的还是会,不会的依然听不懂。一做题,这真的跟讲的那些线性代数有关系吗?
[ABC189E] Rotate and Flip
因为所有点一起动,其实可以记一下整体位移情况的,但既然是线代专场,应该用更优雅的方法。
点的坐标变换可以用矩阵表示,记一个转移矩阵前缀和即可。
CF1662C European Trip
如果没有相邻两次不可以走同一条边的限制,那就是矩阵快速幂板题了。
一开始有一个错误的思路,走两步走重边的情况只有回到起点这一种,所以想到把初始矩阵平方后把主对角线赋为 \(0\)。再依靠这个转移。但这个并不能保证所有移动都没有在相邻步中走重边。比如保证了 \(1\) ~ \(2\) 步与 \(3\) ~ \(4\) 步,但并不能保证 \(2\) ~ \(3\) 步。
后面甚至想过拆点,但发现本质相同
但这是有启发性的,长为 \(k\) 的满足限制的路径条数只与长为 \(k-1\) 与 \(k-2\) 的满足条件的路径条数有关。从 \(k-1\) 转移到 \(k\) 的过程中,新增的不满足条件的路径,恰好为在长为 \(k-2\) 的满足条件的路径中走出去再回到原终点的情况。设 \(dp_{x, i, j}\) 表示长为 \(x\) 的从 \(i\) 到 \(j\) 的满足限制的路径条数,与 \(j\) 有连边的点的集合为 \(S\),\(d_j\) 表示点 \(j\) 的度数。于是有:
至于为什么是 \(d_j-1\),因为从点 \(j\) 沿着 \(i\) 到 \(j\) 的路径方向撤一条边再回来的情况在上一层转移中已经减掉了。
就因为这个一开始以为自己假了,卡了好久,后来发现减 \(1\) 就行啊啊啊啊啊啊啊
具体的转移用矩阵实现转移,只不过要把前两层的状态都放进去,类似于矩阵套矩阵。
记长为 \(x\) 的满足限制的路径条数的答案矩阵为 \(\mathbf{A_x}\),全为零的矩阵为 \(\mathbf{O}\),单位矩阵为 \(\mathbf{I}\),初始存图的邻接矩阵为 \(\mathbf{C}\),转移矩阵为 \(\mathbf{B}\)。上述矩阵大小均为 \(n \times n\),那么:
其中:
矩阵快速幂优化转移即可。注意长为 \(2\) 的合法路径无法从长为 \(0\) 的转移过来,需要特判把主对角线赋为 \(0\),\(k = 1\) 时要特判。
时间复杂度 \(O(8n^3 \log k)\)
P4035 [JSOI2008] 球形空间产生器
相邻两方程相减可以消去二次项,变为 \(n\) 个 \(n\) 元一次方程,高斯消元法求解即可。
P5337 [TJOI2019] 甲苯先生的字符串
看成图论问题,给出串中相邻元素不能连边,矩阵快速幂求长为 \(n\) 的路径数。
P2447 [SDOI2010] 外星千足虫
发现每两个限制相异或后不改变条件,类似于高斯消元把它消成上三角,用线性基实现。