HDU多校2 - 6763 Total Eclipse(贪心+并查集)
生活随笔
收集整理的這篇文章主要介紹了
HDU多校2 - 6763 Total Eclipse(贪心+并查集)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接:點擊查看
題目大意:給出一張 n 個點和 m 條邊組成的無向圖,現在每個點都有一個點權,對于每次操作,可以選擇一個點以及其周圍能夠連接的所有點,令其點權減一,當某個點的點權減到 0 時,就相當于將該點以及相應的連邊從圖中刪除,問刪除掉 n 個點最少需要進行多少次操作
題目分析:比賽時題意出鍋了,自閉了一下午
回到這個題目,貪心去想每次選擇點權最小的點然后將與其相連的連通塊內的所有點點權減一一定是最優的(靠感覺猜的),但是如果暴力去實現的話,時間復雜度將是 n * n 的,考慮正難則反,正著刪除比較困難,那我們就倒著增加,因為正著刪除是依次刪除點權較小的頂點,所以倒著增加的話,就要按照點權從大到小來了,增加點,并且需要實時求出連通塊,不難想到用并查集去維護,將頂點按照點權排序后,對于每個頂點 i ,考慮到正向模擬的話,當前已經將前 i - 1 個點都刪除了,同時剩余了 cnt 個連通塊,則此時第 i 個頂點就是最小的頂點了,可以在每個連通塊內,都進行 val[ i ] 次操作,同時考慮到前面 i - 1 個點已經將?cnt 個連通塊也執行了 val[ i - 1 ] 次操作,所以在每個連通塊內對于點 i 的實際貢獻只是 val[ i ] - val[ i - 1?] ,維護的時候記得開 long long
代碼:
?
?
總結
以上是生活随笔為你收集整理的HDU多校2 - 6763 Total Eclipse(贪心+并查集)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HDU多校2 - 6774 String
- 下一篇: 牛客多校4 - Ancient Dist