前幾天 mns 的時候遇到被卡科技了,然後墊底了(
雖說是個極其簡單的東西,但是出於學乙個演算法必須要寫學習筆記的強迫症,還是寫幾行字吧。
考慮問題:給定正整數 \(a_\),有哪些非負整數能被 \(a_\) 由非負整數權線性表出。\(n=2\) exgcd?完全揹包?
我們發現若 \(x\) 可以,則 \(x+ka_1(k\in\n)\) 也可以。於是我們可以對每個 \(\bmod a_1\) 的同餘類求出最小的能被線性表出的 \(x\)。容易想到,我們可以給 \(0\sim a_1 - 1\) 各設乙個點,對 \(i\in[2, n]\) 連邊 \(x\to (x+a_i)\bmod a_1\) 邊權為 \(a_i\),跑最短路,顯然 \(dis_i\) 就是 \(\bmod a_1=i\) 的最小的能被線性表出的數。
邊數 \(a_1n\),可以把最小值放到 \(a_1\) 的位置。dijkstra 一般跑不滿同餘最短路的圖,1e7 一般能跑。沒了。
演算法模版 同餘最短路
當我們解決形如 sum n a ix i k 的時候,我們可以使用同餘最短路來解決。我們選擇乙個最小的 a i 作為base,然後把其他的 a 表示成 base p left 的形式。我們定義 f i 代表湊出 bmod base 餘 i 的數最小需要多少個 base 而乙個數 p 能被湊出當且僅當...
HDU 6071(同餘最短路)
給你四個點,相鄰兩個點之間有一條連邊。現在問你從 2 號點走到 2 號點的至少為 k 的最短路的長度。因為題目中的 k 比較大,因此一些亂搞的演算法顯然無法通過,而鑑於點數相對來說比較少,因此我們得研究一下這幾個點所蘊涵的性質。我們發現,對於 2 號結點,它有兩條可行的邊,我們設這兩條邊的距離分別為...
兩題切入 同餘最短路
同餘最短路問題在acm比賽裡面考察的較少,屬於冷門的知識點,當我們遇到類似 給定n個整數,求這n個整數能組成多少種不同的數 等等問題的時候,可以考慮這種方法。以p3403作為乙個簡單的示例 有乙個高為h的大樓,每次可以向上移動x y z層,問可以到達的樓層數.簡單的說,這道題就是讓求x x1 y x...