記錄一下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\)。
那麼這題就算作完了。