並查集 以vijos《家族》為例

2021-08-17 19:16:17 字數 801 閱讀 7577

並查集可以用來查詢兩個點是否在同乙個集合中,相比於用圖dfs,效率大大提公升,這裡放兩個截圖對比一下

怎麼樣,時間差距很大吧!

其實並查集的思想就是找出要合併的點的最大公共祖先,這樣我們在判斷兩個點是不是在同乙個集合裡只要判斷他們的祖先是不是相同就行了。

這裡先講並查集的幾個操作:

1:初始化:

void init ()
2:找祖先:

int getf(int v)

else

}

3:合併:

void merge(int v,int u)

}

完整**如下:

#include #include #include using namespace std;

//定義變數

int n,m,q,f[5005];

void init ()

int getf(int v)

else

}void merge(int v,int u)

}int main()

for (int i=1;i<=q;i++)else }

return 0;

}

並查集 家族

若某個家族人員過於龐大,要判斷兩個是否是親戚,確實還很不容易,現在給出某個親戚關係圖,求任意給出的兩個人是否具有親戚關係。規定 x和y是親戚,y和z是親戚,那麼x和z也是親戚。如果x,y是親戚,那麼x的親戚都是y的親戚,y的親戚也都是x的親戚。第一行 三個整數n,m,p,n 5000,m 5000,...

並查集 家族 (ssl 1896)

合併一些集合,然後判斷某兩個點是否在同乙個集合內 若某個家族人員過於龐大,要判斷兩個是否是親戚,確實還很不容易,現在給出某個親戚關係圖,求任意給出的兩個人是否具有親戚關係。規定 x和y是親戚,y和z是親戚,那麼x和z也是親戚。如果x,y是親戚,那麼x的親戚都是y的親戚,y的親戚也都是x的親戚。第一行...

vijos1944 琵琶湖(並查集)

題梗 琵琶島被分割為了 n x m 的格仔圖。每一塊格仔區域都有著確定的高度。不幸的是,琵琶湖的水位最近開始 了,第 i 年湖面的高度將 至 i 公尺。另外一方面,琵琶島是由鬆軟的土質形成的,且琵琶湖的湖水可以自由滲入到其中。也就是說,如果有一塊格仔區域的高度不超過當前的水位,則將被淹沒。相連的未被...