寒假訓練報告1 26(並查集)

2021-08-15 02:23:06 字數 2067 閱讀 7655

今天聽隊友講課講了並查集,好像比去年聽的時候更明白了一些。同時,知道了除了普通並查集,還有種類並查集和帶權並查集等。對於種類並查集的建模能力還有待提高,帶權並查集可能又得下乙個階段才能學習了。

三個重要函式

void init(int n)
int find(int x)
void union(int x, int y)
強調!!由於並查集的題往往資料範圍較大,且find()函式遞迴呼叫。故不宜使用cin,而應直接使用scanf.

no.1

hdu 1213 how many talbes

並查集模板題,套板子即可。

no.2

hdu 1272 小希的迷宮

判斷是否是乙個集合,且沒有環

題解:在合併時如果x, y的根結點相等,說明存在環。在最後遍歷一遍,若i == f[i]的個數大於1, 說明不止乙個集合。

no.3

hdu 1232 暢通工程

並查集模板題,套板子即可。

no.4

hdu 1856 more is better

在普通並查集的基礎上,求合併次數最多項。

題解:另設一t陣列,初始都為1。每次合併時,若使f[fy] = fx;則t[fx] += t[fy];

no.5

poj 1611 病毒傳染

在普通並查集的基礎上,要求每次合併時都以root為根節點。使用union(root, x)即可。

no.6

poj 2524 ubiquitous religions

並查集模板題,套板子即可。

帶權並查集

帶權並查集的特點是每個結點還儲存著一定的資訊,如到跟結點的距離,轉移次數等。解決此類問題,就另設儲存資訊的陣列,在每次轉移時,資訊也隨之轉移。注意,要先遞迴,再轉移資訊。遇到矛盾衝突問題,解決的關鍵是找到矛盾點,可通過畫向量找關係式來解決。

no.7

hdu 3047 zjnu stadium

帶權並查集

尋找座位安排的矛盾,轉化成每個點到根結點的距離問題。帶權並查集模板題。

no.8

hdu 3172 virtual friends

帶權並查集+map

將所給字串先對應轉換成數字,再用並查集模板,同時需另設一陣列t,表示轉移次數。

no.9

hdu 3635 dragon balls

帶權並查集

每個龍珠屬於乙個城市,當城市之間轉移時,該城市所有龍珠都需轉移。查詢龍珠所在城市,該城市龍珠個數,以及轉移次數。

題解:在普通並查集的基礎上,另設一陣列t,表示轉移次數,在合併時自增。另設一陣列num,表示每座城市龍珠數量,在合併時將孩子的龍珠數量增加過來。父親的轉移次數,需在find()時加上孩子的轉移次數。

注意!!!find()中,先遞迴迴圈,再t[x] += t[f[x]];否則會產生時序錯誤。

種類並查集

種類並查集在使用三個函式時,無需變化。開陣列時,有幾種,就開幾倍,在初始化時,引數也應為k * n。

在合併時,若為同種,則合併(x,y), (x + n, y + n), … ,(x + k * n, y + k * n);

若為異種,則合併(x, y + n), (x + n, y + 2 * n), … , (x + k * n, y)

在查詢時,則指查詢一種即可(由於合併時已同步操作)。

no.10

hdu 1829 a bug』s life

種類並查集

需要自己建模,抽象出為兩種,接著套用種類並查集的模板。

no.11

poj 1703 find them, catch them

種類並查集,犯人分為兩個監獄,查詢兩人是否在同一監獄,抽象出種類有兩種,接著套用板子。

no.12

poj 1182 食物鏈

種類並查集經典題,a吃b,b吃c,c吃a,三種關係,種類有三種,接著套用板子。

qbzt寒假 並查集

並查集 kruscal tarjan 求 lca 分類並查集 食物鏈,團夥 敵人的敵人是我的朋友 帶權並查集 sdoi2016 齒輪 可用 int father int x 建邊 任意相鄰兩格仔之間建邊,權值為海拔差 將邊排序,從小往大乙個乙個往裡加,當乙個並查集內部有起點,並且大小 點數 t,這裡...

演算法訓練 並查集

這個是我做 kuangbin帶你飛專題訓練的第三個專題,對應的是 kuangbin帶你飛專題五,這個專題是並查集專題,包含14道題目。並查集屬於樹形結構,是一種用來管理元素分組情況的資料結構。並查集可以高效的進行如下操作 值得注意的是,並查集雖然可以進行合併操作,但是不能進行分割操作。當然了這並不意...

2020 寒假私訓 並查集

並查集的原理很簡單 在下標對應的陣列中寫入當前下標的父節點,說明當前節點和父節點有羈絆,無數個子節點連線著乙個父節點,如果要想判斷兩個節點之間是否有羈絆,只需對一對他們的父輩 根節點 就行了。並查集一般用於查詢圖中節點之間的關係。並查集演算法一般包括3大部分 find 函式用來確定某節點x1的父親節...