刷題 GERALD07加強版

2022-03-26 02:50:32 字數 729 閱讀 5498

是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...