題目大意:給出一張 n 個點和 m 條邊組成的無向圖,現(xiàn)在每個點都有一個點權,對于每次操作,可以選擇一個點以及其周圍能夠連接的所有點,令其點權減一,當某個點的點權減到 0 時,就相當于將該點以及相應的連邊從圖中刪除,問刪除掉 n 個點最少需要進行多少次操作
題目分析:比賽時題意出鍋了,自閉了一下午
回到這個題目,貪心去想每次選擇點權最小的點然后將與其相連的連通塊內的所有點點權減一一定是最優(yōu)的(靠感覺猜的),但是如果暴力去實現(xiàn)的話,時間復雜度將是 n * n 的,考慮正難則反,正著刪除比較困難,那我們就倒著增加,因為正著刪除是依次刪除點權較小的頂點,所以倒著增加的話,就要按照點權從大到小來了,增加點,并且需要實時求出連通塊,不難想到用并查集去維護,將頂點按照點權排序后,對于每個頂點 i ,考慮到正向模擬的話,當前已經將前 i - 1 個點都刪除了,同時剩余了 cnt 個連通塊,則此時第 i 個頂點就是最小的頂點了,可以在每個連通塊內,都進行 val[ i ] 次操作,同時考慮到前面 i - 1 個點已經將?cnt 個連通塊也執(zhí)行了 val[ i - 1 ] 次操作,所以在每個連通塊內對于點 i 的實際貢獻只是 val[ i ] - val[ i - 1?] ,維護的時候記得開 long long