BZOJ4668 冷戰 並查集

2021-09-08 05:18:31 字數 2183 閱讀 6050

time limit: 10 sec  memory limit: 256 mb

submit: 538  solved: 269

[submit][status][discuss]

1946 年 3 月 5 日,英國前首相溫斯頓·邱吉爾在美國富爾頓發表「鐵

幕演說」,正式拉開了冷戰序幕。

美國和蘇聯同為世界上的「超級大國」,為了爭奪世界霸權,兩國及其

盟國展開了數十年的鬥爭。在這段時期,雖然分歧和衝突嚴重,但雙方都

盡力避免世界範圍的大規模戰爭(第三次世界大戰)爆發,其對抗通常通

過區域性**戰爭、科技和軍備競賽、太空競爭、外交競爭等「冷」方式進

行,即「相互遏制,不動武力」,因此稱之為「冷戰」。

reddington 是美國的海軍上將。由於戰爭局勢十分緊張,因此他需要

時刻關注著蘇聯的各個活動,避免使自己的國家陷入困境。蘇聯在全球擁

有 n 個軍工廠,但由於規劃不當,一開始這些軍工廠之間是不存在鐵路

的,為了使**製造更快,蘇聯決定修建若干條道路使得某些軍工廠聯通。

reddington 得到了蘇聯的修建日程表,並且他需要時刻關注著某兩個軍工

廠是否聯通,以及最早在修建哪條道路時會聯通。具體而言,現在總共有

m 個操作,操作分為兩類:

• 0 u v,這次操作蘇聯會修建一條連線 u 號軍工廠及 v 號軍工廠的鐵

路,注意鐵路都是雙向的;

• 1 u v, reddington 需要知道 u 號軍工廠及 v 號軍工廠最早在加入第

幾條條鐵路後會聯通,假如到這次操作都沒有聯通,則輸出 0;

作為美國最強科學家, reddington 需要你幫忙設計乙個程式,能滿足

他的要求。

第一行兩個整數 n, m。

接下來 m 行,每行為 0 u v 或 1 u v 的形式。

資料是經過加密的,對於每次加邊或詢問,真正的 u, v 都等於讀入的

u, v 異或上上一次詢問的答案。一開始這個值為 0。

1 ≤ n, m ≤ 500000,解密後的 u, v 滿足1 ≤ u, v ≤ n, u不等於v

對於每次 1 操作,輸出 u, v 最早在加入哪條邊後會聯通,若到這個操

作時還沒聯通,則輸出 0。

5 90 1 4

1 2 5

0 2 4

0 3 4

1 3 1

0 7 0

0 6 1

0 1 6

1 2 603

5昨天zbq老司機用暴力啟發式合併把codechef t6切了好強啊

感覺這東西也沒啥玄學的吧,就是把小的往大的上面合併,時間複雜度為$o(nlogn)$

這題好像按高度合併也不錯?

連的時候暴力連父親就行,對答案沒影響

BZOJ4668 冷戰 並查集

比較自然的思路是,由於需要記錄連通塊合併時的資訊,所以需要建出kruskal重構樹。不妨考慮在並查集合並的同時記錄資訊,pre x 表示x與它的父親相連的時刻。兩個點連通的時刻,等於兩個點之間路徑上時刻的最大值。注意到按秩合併但不路徑壓縮的並查集不改變樹的結構,且樹高為log,正好符合要求。o n ...

BZOJ4668 冷戰 並查集

time limit 10 sec memory limit 256 mb submit 538 solved 269 submit status discuss 1946 年 3 月 5 日,英國前首相溫斯頓 邱吉爾在美國富爾頓發表 鐵 幕演說 正式拉開了冷戰序幕。美國和蘇聯同為世界上的 超級大國...

BZOJ4668 冷戰 並查集 LCA

題意 動態給點連邊 詢問兩個點之間最早是在第幾個操作連起來的 題解 因為並查集按秩合併 秩最高是logn的 所以我們可以考慮把秩看作深度 跑lca include using namespace std const int maxn 5e5 5 int n,m,cnt intfa maxn inti...