记录一下day6发生的事情吧。优化
7:30spa
到达附中求索碑,被人膜,掉RP。io
7:50技巧
进考场,6楼的最后一排的最左边的位置,世界上最角落的地方,没有任何想法。im
发现电脑时间和别人不同,赶快调了一下。数据
8:00时间
等待发题。思考
8:03co
题发了,为何要迟发呢。=)time
8:05-9:30
左思右想T1什么鬼东西。中间看了看T2T3是啥。
9:30-10:30
对T3的水震惊之余,把T3切掉了,顺便在准考证背面写了题解,准备给同窗看看,以便带出去交流。
10:50-12:00
思考T2骗分,T2又是DNA序列,思考为何FJ不建一个全国基因研究库,就开在FCS里面,专门研究不相交DNA序列反转和两个DNA的最近公共祖先的长度呢?
最终仍是输出了-1。233333
12:00-13:00
和@qrc交流T3,和其余人讲T3怎么作,期盼本身能ACT3。
13:00-18:30
机房划水,TR灾厄坑有了很大的进展,见识了克苏鲁之眼的狂暴形态。(???)
看了成绩,稳稳110,和nealchen并列FJ No.12,很是的舒服。
说说题解吧,也只会T3了
【T3】
题意:有n个城市,每一个城市都有p个出入口,第\(i\)个城市的第\(j\)个出口有\(U_{i,j}\)条路径,入口有\(V_{i,j}\)条路径,从一个城市的第\(j\)出口出去,也要在另外一个城市的第\(j\)入口进入才行。
那么,请你求出通过不超过k条路径的,从S旅行到T的方案数吧,虽然城市的图是同样的,可是有多组询问哦。
数据范围:\(1\leq n\leq 1000,1\leq p\leq 20,0\leq k\leq 10^{18}\)。
题解:观察到图的邻接矩阵是乘积的形式:\(A_{i,j}=\sum_{k=1}^{p}U_{i,p}\cdot V_{j,p}=\sum_{k=1}^{p}U_{i,p}\cdot V^{T}_{p,j}=U\cdot V^T\),准确的说,是矩阵乘积的形式!
这给接下来的解题提供了提示。
那么咱们要求出\(Sum=A^0+A^1+\cdots+A^k\),准确的说,要求出\(Sum_{S,T}\),这里的\(Sum\)是一个矩阵哦。
若是直接计算,矩阵乘法都会TLE。
那么咱们化简:
\(Sum=I+U\cdot V^T+U\cdot V^T\cdot U\cdot V^T+\cdots+(U\times V^T)^k\)
\(Sum=I+U\cdot(I+V^T\cdot U+(V^T\cdot U)^2+\cdots+(V^T\cdot U)^{k-1})\cdot V^T\)
恐怖的式子,对吧。可是咱们完成了很重要的一步,注意到了吗:\(V^T\cdot U\)是一个\(p\times p\)的矩阵,这说明了矩阵乘法变得更快了!
用以往的技巧,构造\(2p\times 2p\)的矩阵,能够记录前缀和。
把这个矩阵的1,2,4,8,16...次幂记录下来,就能够直接快速求得任意次幂了。注意加上稀疏矩阵优化。
最终,前乘\(U\),后乘\(V^T\),再加上单位矩阵,就获得答案。
最后的小优化:由于求得是\(Sum_{S,T}\),只要一个元素,能够更快求出来,不用求出整个\(Sum\)。
那么这题就算作完了。