1. 程式人生 > >NOIP 2016 天天愛跑步

NOIP 2016 天天愛跑步

分享圖片 size image img spa noip 必須 沒有 mil

我獨立想只想出來了前80分的做法,不過貌似我的做法離正解比較遠

技術分享圖片

測試點1~2

直接看每個點有多少玩家且這個點時間為0即可

測試點3~4

看每個點有多少個起點

測試點5

暴力模擬過程即可

測試點6~8

每個玩家在起點的點記錄下起點和終點

然後搜每一個點,算出如果要跑到這點應該在的起點,然後再根據這個起點和終點來看

經不經過當前這個點

測試點9~12

要滿足被經過則deep[i] = w[i]

那麽關鍵是路徑由沒有過當前點

那麽對每一個終點,把這個終點到根的路徑的每個點的權值加1即可(用樹上差分)

這樣找每個觀察員的時候就知道他被多少路徑覆蓋了

測試點13~16

可以通過w的值算出可以觀察到的路徑的長度

那麽根據長度進行排序

對於每一個觀察員,算出路徑的長度

然後可以二分出當前長度的區間。

但是這個時候起點必須在觀察員的子樹內

那麽我們可以記錄dfs序,排序的時候長度為第一關鍵字,dfs序為第二關鍵字

那麽就可以兩次二分求左端點和右端點,就可以求出出符合條件的路徑有多少了。

這個做法很騷,想了很久。

這就是我能獨立想出的極限了。

看了下題解發現我貌似偏離正解比較遠……

NOIP 2016 天天愛跑步