是lct了。
首先我們不知道聯通塊怎麼數。
然後頹標籤知道了是lct。
那麼考慮一下怎麼lct搞。
有乙個很普遍的思路大家也應該都知道,就是如何求乙個區間中某種顏色的個數。
這個可以很簡單的用主席樹來實現對吧,只需要記錄下來這種顏色上次出現的位置就可以了,然後在$[l,r]$中查詢值在$[0,l-1]$中的數的個數。
然後聯通塊和這個有什麼關係呢?
顏色的話為什麼可以用這種方法代替呢?為了去重,而這道題中什麼情況是所謂「重」的呢?
就是兩條邊鏈結了兩個相同的集合的時候。
那麼考慮以下一種演算法。
用lct維護生成樹。動態加邊,並查集維護聯通性。
如果當前這條邊鏈結的兩個端點已經在乙個集合中了,那麼說明這條邊可以替代掉之前的某一條邊,記為$res[i]$那麼這條邊能夠連線某兩個集合的時候也就是在$[res[i]+1,i]$這個區間中,在lct中查詢最早的$res[i]$那麼也就是當前這條邊所能其作用的最早的端點,同時lct刪掉res[i],link上i。
如果當前這條邊鏈結的兩個端點沒有在乙個集合中,直接link上i。
那麼考慮乙個區間的答案。
每增加乙個新的可以鏈結這個聯通塊的邊,那麼n個集合會變成n-1個。
也就是說,答案就是n減去這些邊中真正能夠鏈結兩個不再同一集合中端點的邊的個數。
那麼其實也就是這段區間中$res$值小於$l-1$的數的個數。
主席樹維護即可。
得解。
GERALD07加強版題解
題目描述 n個點m條邊的無向圖,詢問保留圖中編號在 l,r 的邊的時候圖中的聯通塊個數。輸入格式 第一行四個整數n m k type,代表點數 邊數 詢問數以及詢問是否加密。接下來m行,代表圖中的每條邊。接下來k行,每行兩個整數l r代表一組詢問。對於type 0的測試點,讀入的l和r即為詢問的l ...
字串 07 說反話 加強版 20
給定一句英語,要求你編寫程式,將句中所有單詞的順序顛倒輸出。輸入格式 測試輸入包含乙個測試用例,在一行內給出總長度不超過500 000的字串。字串由若干單詞和若干空格組成,其中單詞是由英文本母 大小寫有區分 組成的字串,單詞之間用若干個空格分開。輸出格式 每個測試用例的輸出佔一行,輸出倒序後的句子,...
字串 07 說反話 加強版 20
輸入格式 測試輸入包含乙個測試用例,在一行內給出總長度不超過500 000的字串。字串由若干單詞和若干空格組成,其中單詞是由英文本母 大小寫有區分 組成的字串,單詞之間用若干個空格分開。輸出格式 每個測試用例的輸出佔一行,輸出倒序後的句子,並且保證單詞間只有1個空格。輸入樣例 hello world...