並查集模板

2022-05-16 05:06:20 字數 1521 閱讀 1077

路徑壓縮+按秩合併

1 #include 2 #include 3 #include 4

using

namespace

std;

5const

int maxn=500010;6

inta[maxn], n;

7int

fa[maxn];

8int

rank[maxn];910

void

init()

15return;16

}1718int find(int

z) 23

24void unionn(int x,int

y)

31else

36return

;37 }

例題

洛谷t3766

//find與fa引發的血案

有乙個 m 行 n 列的點陣,相鄰兩點可以相連。一條縱向的連線花費乙個單位,一條橫向的連線花費兩個單位。某些點之間已經有連線了,試問至少還需要花費多少個單位才能使所有的點全部連通。

輸入格式:

第一行輸入兩個正整數 m 和 n。

以下若干行每行四個正整數 x1,y1,x2,y2, 表示第 x1 行第 y1 列的點和第 x2 行第 y2 列的點已經有連線。輸入保證|x1-x2|+|y1-y2|=1。

輸出格式:

輸出使得連通所有點還需要的最小花費。

輸入樣例#1:

2 2

1 1 2 1

輸出樣例#1:

3

30%資料: n*m<=1000

100%資料: m,n<=1000

標程

//find與fa引發的血案

1 #include 2 #include 3 using namespacestd;

4 intm, n, tot, ans;

5 int fa[1000010]; //father x,y=fa[x*1000+y]

6 7 int find(intz)

11 12 int unionn(int x, inty)

17 18 intmain()

26 for (int i=1; i<=sum; i++)

27 if (fa[i]==i) tot++;

28 if(tot==1)

29 for (int i=1; i<=n; i++)

37 if (tot==1)

38 }

39 }

40 for (int i=1; i)

46 if (tot==1)

47 }

48 cout<<"0";

49 return 0;

50 }

並查集模板

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

並查集模板

普通並查集 define max size 100005 int pa max size 儲存有向圖的邊 void init 初始化 該函式可以根據具體情況儲存和初始化需要的內容 int findset int a 不帶路勁壓縮 return a void union nodes int a,int...

並查集模板

codevs 2597 團夥 題目描述 description 1920年的芝加哥,出現了一群強盜。如果兩個強盜遇上了,那麼他們要麼是朋友,要麼是敵人。而且有一點是肯定的,就是 我朋友的朋友是我的朋友 我敵人的敵人也是我的朋友。兩個強盜是同一團夥的條件是當且僅當他們是朋友。現在給你一些關於強盜們的資...