原題連結
題意
對於有相同顏色傳送門的城市 \(i,j\),可以花 \(|i-j|\) 的代價從 \(i\to j\) 或 \(j \to i\)
問從城市 \(x\to y\) 的最小代價,或者報告無法到達
分析
對於無法到達的情況,很簡單,用並查集維護即可
而對於可以到達的情況,我們發現,兩座城市如果可以互相直接抵達,cost 是確定的
所以我們對與可以直接互相到達的城市,建立雙向邊,權值為 \(|i-j|\)
然後查詢最小代價就變成了查詢兩個點的最短路
預估時間複雜度 \(O(????)\)
困難點在於,建邊需要平方的複雜度,查詢兩點最短路也很複雜
能不能最佳化?
我們可以在建邊上使技巧
由於只有相同顏色的傳送門才會建邊,且邊權值為城市編號的差
所以我們可以把具有每種顏色傳送門的城市剝離開來,然後按升序排序,然後遍歷一遍,只在相鄰的元素之間建邊
這樣,圖的連通性不變,任意兩點間的距離也不變,但是建邊的時間複雜度變成了線性
建邊的複雜度解決了,查詢的時間複雜度仍然很高,我們該如何解決?