並查集(模板題)

2021-09-25 02:08:35 字數 3330 閱讀 1871

並查集是一種樹形的資料結構,用於處理一些不相交集合的合併及查詢問題。

並查集通過乙個一維陣列來實現。

(1)查詢元素a和元素b是否屬於同一集合;

(2)合併元素a和元素b所在的集合;

第一步:初始化

void

init

(int n)

第二步:查詢根節點(即找祖先)

遞迴版本:

int

find_f

(int x)

///不停找爹,直到找到祖宗為止

}

迴圈版本:

int

find_f

(int x)

第三步:合併子集

void

merge

(int x,

int y)

cout<<

"yes"

}

p3367 【模板】並查集

如題,現在有乙個並查集,你需要完成合併和查詢操作。

第一行包含兩個整數n、m,表示共有n個元素和m個操作。

接下來m行,每行包含三個整數z、x、y

當z=1時,將x與y所在的集合合併

當z=2時,輸出x與y是否在同一集合內,是的話輸出y;否則話輸出n

如上,對於每乙個z=2的操作,都有一行輸出,每行包含乙個大寫字母,為y或者n

輸入樣例:

4 72 1 2

1 1 2

2 1 2

1 3 4

2 1 4

1 2 3

2 1 4

輸出樣例:ny

ny說明時空限制:1000ms,128m

資料規模:

對於30%的資料,n<=10,m<=20;

對於70%的資料,n<=100,m<=1000;

對於100%的資料,n<=10000,m<=200000。

路徑壓縮:

#include

using namespace std;

int f[

10010];

void

init

(int n)

}int

get(

int x)

void

merge

(int x,

int y,

int z)

else

if(z==1)

}int

main()

return0;

}

路徑壓縮+啟發式合併:

#include

using namespace std;

int f[

10010

],depth[

100010];

void

init

(int n)

}int

getf

(int v)

//查詢他的父節點

//下面為啟發式合併的核心**,增加乙個depth陣列來儲存每個節點的深度,總是把節點並在深度大的節點上

void

merge

(int u,

int v,

int z)

///按照秩來做啟發式合併

else

if(depth[t1]

)else

if(depth[t1]

==depth[t2])}

}else

if(z==2)

}int

main()

return0;

}

並查集中的啟發式合併

圖論演算法----並查集中的啟發式合併

description

這是一道模板題。

維護乙個 n 點的無向圖,支援:

加入一條連線 u 和 v 的無向邊

查詢 u 和 v 的連通性

由於本題資料較大,因此輸出的時候採用特殊的輸出方式:用 0 或 1 代表每個詢問的答案,將每個詢問的答案依次從左到右排列,把得到的串視為乙個二進位制數,輸出這個二進位制數 mod 998244353 的值。

input

第一行包含兩個整數 n, m,表示點的個數和操作的數目。

接下來 m 行每行包括三個整數 op, u, v 。

如果 op=0,則表示加入一條連線 u 和 v 的無向邊;

如果 op=1,則表示查詢 u 和 v 的連通性。

n ≤ 4000000 , m ≤ 8000000

output

一行包括乙個整數表示答案。

sample input

3 61 1 0

0 0 1

1 0 1

1 1 2

0 2 1

1 2 1

sample output

5hint

答案串為 101 。

#include

using namespace std;

typedef

long

long ll;

const ll mod=

998244353

;ll n,m,f[

4000005

],ans;

void

init

(int n)

ll get

(ll x)

inline

void

merge

(int x,

int y)

return;}

inline bool find_d

(int x,

int y)

intmain()

//題目資料過大,二進位制轉換為十進位制後可能會超long long,所以不能等全部存起

else

}else

if(op==0)

}printf

("%lld\n"

,ans%mod)

;return0;

}

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

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

Rumor 並查集模板題

rumor vova 對自己發誓,絕不再玩電腦遊戲 但最近,知名的遊戲開發商暴火娛樂 發布了他們的最新遊戲 world of farcraft 並且該遊戲變得非常流行。顯然,vova 又開始玩這款遊戲。現在,他嘗試解決乙個任務。這項任務是,來到乙個名叫 overcity 的定居點,並在裡面散播謠言。...

並查集模板

來自lifeng wang http hi.baidu.com fandywang jlu 前輩06年寫的東西,追隨前人足跡繼續努力。並查集的一些題目和相關解題報告 poj 1611 the suspects 最基礎的並查集 poj 2524 ubiquitous religions 最基本的並查集...