NOIP模擬賽,禮物,線段樹優化建圖
阿新 • • 發佈:2018-11-09
正題
題目是這樣的:
Rose一共有n個禮物,他女朋友也有n個禮物。
這些禮物有兩個權值,x表示的是該禮物在Rose眼裡的重要度,y表示的是該禮物在其女朋友眼裡的重要度。
當一個人收到自己眼裡價值為的禮物時,會回贈在自己眼裡在的禮物。
當一個人收到自己眼裡價值為0的禮物時,會覺得對方沒有誠意,所以就會停止送禮物。
問Rose先送第i個禮物給其女朋友,最快什麼時候會結束送禮物。(操作由你決定。
題解:
我們把Rose和其女朋友的禮物分成兩堆點,那麼我們可以對這兩堆點進行連邊。
邊表示什麼呢?
表示的是,當送i禮物的時候,另一方可以回贈j禮物。那麼我們從i到j建一條權值為1的邊。
特殊的,左邊的y權為0的點和右邊x權為0的點向ed連一條權值為1的邊,表示結束。
因為是求多個點到一個點ed的最短路,所以我們把邊反著建,求ed到多個點的最短路就是答案了。
好的,因為資料過水,已經是正解了。
考慮線段樹優化建圖,左邊按x來排序,右邊按y來排序,那麼當從左邊向右邊連邊的時候,連的一定是連續的一段點。
右邊往左邊也一樣,那麼這兩個端點可以通過二分查詢。
線段樹優化一下建圖就可以了。
最後,因為線段樹裡面的邊是0邊,其他的邊都是1邊,要跑最短路?
不用,跑雙端佇列bfs就可以了,相關證明無處可尋,感性理解即可。