NOIP 2016 天天愛跑步
阿新 • • 發佈:2018-10-30
分享圖片 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 天天愛跑步