題意:n個飛機一次出航。第i個飛機在出航序列中的序號不大於ki。另外有一些限制,,表示飛機a的出航序號小於飛機b。(1)輸出乙個合法的出航序列;(2)輸出每個飛機最早的出航序號。
思路:參考這裡。第一問比較好搞定。對於給出的,我們不妨建立有向邊。那麼b的所有孩子的出航序號必然小於b的出航序號。按照這個拓撲排序一次,用父節點b的出航序號kb-1更新孩子a的出航序號ka。那麼,最後得到的這個出航序號(設這個陣列為a)排序輸出就是第一問答案。第二問比較麻煩。首先對於飛機b我們遍歷一下以它為根節點的所有節點(用p[b]表示)設數量為limit,那麼b的出航序號至少為limit,不能再小了。另外,在第一問求出的陣列a中,若有節點a,a不是b的孩子但是a[a]<=limit,這樣的話,若b為limit,那麼a只能為limit+1了,不行,所以b的序號只能增加1,變為limit=limit+1。這樣就行了嗎?不是的。看下面這個圖,旁邊的數字表示陣列a。對於4號來說,按照上面的求出來的limit為1。但是它能為1嗎?若4排在1號,3在2號,10在3號,最後你會發現2和1乙個在4號,另乙個沒地方放了。。怎麼辦?對於節點a(a不是b的孩子),設cnt=p[b]+不是b的孩子但是a[x]<=a[a]的所有x數量。那麼若a[a]
Noi2010 Plane 航空管制
這道題做法很簡單,年鑑上講的很複雜的樣子 首先第一問,對於每個節點來說,他肯定要比自己的後繼先,在此基礎上越往後越好 盡量滿足限制嚴格的其他點 那麼可以將乙個節點i的k更新為min k i k j 1 j為i的後繼 注意更新的時候要按照拓撲序來,否則有可能更新不完全 他兒子還沒更新完就更新他了 我一...
bzoj2109 航空管制
這題不難想到二分答案。你先對大小關係建乙個反圖,表示如果你想知道這個點,你必須先得到那個點的狀態 由於保證有解,所以這是乙個拓撲圖 然後你就拓撲排序地走。每乙個點就是連向它所有點的最小值,以及自己的時間,取乙個最小值值i,表示1 i它都可以選 策略,肯定是只要可以,就往後面放,正確性顯然 於是我們就...
NOI2010 航空管制
二元組的限制 考慮拓撲排序 正向拓撲不能保證最優,因卡的是結束時間 所以方向建圖topo 從n為0時間,相當於在n k i 的時間出現一架飛機 小根堆維護,每次選擇當前最早出現的一架飛機起飛。由於保證有解,這個顯然是正確的,對於當前只有一架飛機,不飛白不飛 當然也不能不飛 多架飛機,先飛後飛反正都是...