Educational Codeforces Round 91 E(啟發(fā)式合并/并查集)
題意:
????給出半徑為??的?
?個(gè)圓環(huán)和?
?個(gè)塔,要求每個(gè)塔上圓環(huán)的半徑始終從底向上遞減,一次操作可以將一個(gè)塔頂部的若干個(gè)盤(pán)子移動(dòng)到另一個(gè)塔的頂部,我們定義某一情形下的復(fù)雜度為將所有圓環(huán)移動(dòng)到同一個(gè)塔上所需要的最小操作數(shù)。題目給出?
?次詢(xún)問(wèn),每次詢(xún)問(wèn)時(shí)輸出當(dāng)前塔狀態(tài)的復(fù)雜度并合并兩個(gè)塔上的圓環(huán)到同一個(gè)塔上。
思路:
????首先手動(dòng)模擬樣例之后可以發(fā)現(xiàn),如果我們要移動(dòng)當(dāng)前的圓盤(pán)??,那么?
?和?
?必須有一個(gè)不在跟?
?同一個(gè)塔上面,如果有一個(gè)不在同一個(gè)塔則代價(jià)為1,兩個(gè)都不在則為2,那么我們的答案就是當(dāng)前剩下的所有塔中,相鄰圓盤(pán)編號(hào)不在同一個(gè)塔上的個(gè)數(shù)。
????那么對(duì)于合并操作,如果每次都排序然后暴力檢查的話(huà)必然直接超時(shí), 那么可以考慮并查集,但是并查集僅能優(yōu)化合并的操作,并不能避免檢查的操作,這樣暴力檢查的操作復(fù)雜度依然是的復(fù)雜度,依然超時(shí)。注意到我們可以?xún)H考慮要合并的兩個(gè)塔是否會(huì)有相鄰編號(hào)的圓盤(pán)會(huì)被放在同一個(gè)塔上,因?yàn)槠渌蠄A盤(pán)的相對(duì)順序并沒(méi)有改變,所以可以用啟發(fā)式合并的思想,我們可以選擇兩個(gè)塔中
更小的那一個(gè),合并到大的那一個(gè)里面去,這樣復(fù)雜度就是
了