CF845G Shortest Path Problem? 題解
阿新 • • 發佈:2022-04-17
首先看到題目的時候,看見異或最小值,就需要想到可能是線性基,而這題正需要線性基。
對於 \(1 \to n\) 的路徑而言,我們可以將這條路徑拆成 2 部分:一條鏈 + 一些環。
相當於我們要求鏈的路徑長度異或上所有環長度的最小值。
先看所有環長度的異或最小值,我們可以先用一遍 DFS 預處理出所有的環,將這些環的長度丟到線性基裡面,那麼這樣線性基能異或出來的最小值就是所有環長度的最小值。
但是還有一條鏈啊?
實際上這條鏈可以隨便選!
證明如下:
假設我們不能隨便選鏈,也就是說我們必須選擇長度為 \(A\) 的鏈才能得到正確答案。
設所有環能異或出的最小值為 \(x\),我們選出的路徑長度為 \(B\)
但是注意到這是一張無向圖,因此路徑 \(A\) 和路徑 \(B\) 共同組成了一個環。
由於我們需要求的是最小值,因此當我們遍歷線性基求最小值的時候由於 \(A \oplus x\) 更優,將會導致 \(B \gets B \oplus A\)。
因此實際上 \(A,B\) 兩條路徑是同等優秀的,不存在哪條更加優秀的鏈。
證畢。
Code:GitHub CodeBase-of-Plozia CF845G Shortest Path Problem.cpp