並查集 小白

2021-10-09 05:17:21 字數 1575 閱讀 4021

南昌理工學院acm集訓隊

超級有意思的並查集解釋

也不知道是哪位大神寫出來的,多看幾遍就懂了。

我感覺我寫不出來比這更好的並查集解釋了,還很有趣。

那理解了並查集就來看一下例題吧

洛谷p1111 修復公路

直接上**了

#include

#include

#include

#include

#include

const

int max=

100000

;using

namespace std;

typedef

long

long ll;

//洛谷p1111 修復公路

//並查集 快速排序

int par[

1001];

struct tnode g[

100001];

bool

cmp(tnode i,tnode j)

intfind

(int x)

return r;

}int sum=1;

void

join

(int x,

int y)

}int

main()

for(

int i=

0;i )sort

(g,g+m,cmp)

;//快排

for(

int i=

0;i cout<<

"-1"

}

除了加上了乙個結構快排外其他的都是並查集的模板了

當然,在平時做題的時候,光知道模板肯定是不夠的,還是需要多加練習去真正掌握

比如如果我要求多個集合中,最大集合的個數要怎麼求呢?

#include

#include

#include

#include

//求最大集合中元素的個數

//裸的並查集加乙個秩陣列就可以了

using

namespace std;

const

int max =

10000005

;int h[max]

,k[max]

,maxx,max=

0,n,a,b;

void

init()

}int

find

(int x)

return h[x];}

void

join

(int x,

int y)

}int

main()

init()

; maxx =0;

for(

int i =

1;i <=n;

++ i)

printf

("%d\n"

,maxx);}

return0;

}

也就是在並查集的模板上加一些東西,這些就需要自己的思考了

並查集 並查集

本文參考了 挑戰程式設計競賽 和jennica的github題解 陣列版 int parent max n int rank max n void init int n int find int x else void union int x,int y else 結構體版 struct node ...

並查集入門(普通並查集 帶刪除並查集 關係並查集)

什麼是並查集?通俗易懂的並查集詳解 普通並查集 基礎並查集 例題 題解 how many tables problem description lh boy無聊的時候很喜歡數螞蟻,而且,還給每乙隻小螞蟻編號,通過他長期的觀察和記錄,發現編號為i的螞蟻會和編號為j的螞蟻在一起。現在問題來了,他現在只有...

並查集,帶權並查集

題意 ignatius過生日,客人來到,他想知道他需要準備多少張桌子。然而一張桌子上面只能坐上相互熟悉的人,其中熟悉可定義成為a與b認識,b與c認識,我們就說a,b,c相互熟悉 例如a與b熟悉and b與c熟悉,d與e熟悉,此時至少需要兩張桌子。輸入 t表示樣例個數,n表示朋友個數,朋友從1到n編號...