C P3367 模板 並查集

2021-08-28 08:48:01 字數 709 閱讀 5552

本來打算嘗試學一下lca的,但是發現似乎離線演算法需要預備知識:並查集,於是嘗試學了一下並查集。

並查集的思想:

有時候我們需要對乙個集合進行操作,比如判斷某個數是否屬於另乙個數所屬於的某個集合,那麼我們就可以用這樣的思想:

每乙個集合只存乙個代表,集合中的其他元素都連線這個代表,而這個集合中除了代表連線著其他元素,其他元素不互相連線。

這樣的話,速度就快很多了。比如原來我們可能需要這樣:

對於乙個集合大小為n的集合,時間複雜度為o(n)

而使用並查集後,複雜度為o(1)

**:

#include#includeusing namespace std;

int data[10001];

int find(int k)

int main()

for(int i=0;i>a>>b>>c;

if(a==1)else if(a==2):k的值為要查詢的值,方法本身的用處是查詢k的最大的父親,那麼這一行的意思就是:如果k的父親是他自己,就返回他自己。

第二行:如果k的父親不是k自己,就查詢 k的父親 的最大的父親,並設定k的最大的父親為 k的父親 的最大的父親。這樣就可以得出,從k到k次一級的父親都會直接變成最大的父親的兒子。

題目(洛谷):

題解(洛谷):

並查集模板題 P3367 模板 並查集

如題,現在有乙個並查集,你需要完成合併和查詢操作。第一行包含兩個整數n m,表示共有n個元素和m個操作。接下來m行,每行包含三個整數zi xi yi 當zi 1時,將xi與yi所在的集合合併 當zi 2時,輸出xi與yi是否在同一集合內,是的話輸出y 否則話輸出n 如上,對於每乙個zi 2的操作,都...

並查集(模板) 洛谷3367

題目描述 如題,現在有乙個並查集,你需要完成合併和查詢操作。輸入輸出格式 輸入格式 第一行包含兩個整數n m,表示共有n個元素和m個操作。接下來m行,每行包含三個整數zi xi yi 當zi 1時,將xi與yi所在的集合合併 當zi 2時,輸出xi與yi是否在同一集合內,是的話輸出y 否則話輸出n ...

洛谷 3367 模板 並查集

題目描述 如題,現在有乙個並查集,你需要完成合併和查詢操作。輸入格式 第一行包含兩個整數n m,表示共有n個元素和m個操作。接下來m行,每行包含三個整數zi xi yi 當zi 1時,將xi與yi所在的集合合併 當zi 2時,輸出xi與yi是否在同一集合內,是的話輸出y 否則話輸出n 輸出格式 如上...