初始化
把每個點所在集合初始化為其自身。
通常來說,這個步驟在每次使用該資料結構時只需要執行一次,無論何種實現方式,時間複雜度均為o(n)。
查詢
查詢元素所在的集合,即根節點。
合併
將兩個元素所在的根節點相同,集合合併為乙個集合,根節點不同就新建乙個集合。
通常來說,合併之前,應先判斷兩個元素是否屬於同一集合,這可用上面的「查詢」操作實現。
不理解?戳這裡
注意:要看題意編號是從0開始還是從1開始,模板是從1開始
int p[1000005], r[1000005模板二:進行路徑壓縮,當前元素的上級直接就是根節點];int n,t=0
;void init()//
初始化集合,每個元素的老闆都是自己
}int find(int x) //
查詢x的掌門
void join(int x,int y) //
我想讓虛竹和周芷若做朋友
void num()//
求不同子集個數
}bool sameroot(int x, int y)//
查詢兩個元素的老闆是否相同
int p[1000005], r[1000005模板題:];int n,t=0
,cnt;
void init()//
初始化集合,每個元素的老闆都是自己
}int find(int x)//
查詢元素x的老闆是誰
void join(int x, int y)//
合併兩個集合
}void num()//
求不同子集個數
}bool sameroot(int x, int y)//
查詢兩個元素的老闆是否相同
//這裡也可以用cnt求不同子集個數,初始化cnt=n,每加入一條邊,cnt=cnt-1;
並查集模板
來自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年的芝加哥,出現了一群強盜。如果兩個強盜遇上了,那麼他們要麼是朋友,要麼是敵人。而且有一點是肯定的,就是 我朋友的朋友是我的朋友 我敵人的敵人也是我的朋友。兩個強盜是同一團夥的條件是當且僅當他們是朋友。現在給你一些關於強盜們的資...