並查集的應用

2021-09-29 04:00:32 字數 2613 閱讀 6453

並查集可以有很多應用。比如權值並查集或帶擴充套件域的並查集,可以來維護一些可傳遞的關係。當然,並查集最直接的應用,則是來維護集合的的連通關係。

第一題題意:給出一幅圖,以及一系列操作,每次操作刪去乙個點,及這個點相關的所有邊,並輸出刪點之後的連通塊個數。

思路:這道題把過程倒著來就好了,可以看成建圖的過程,如果要新加一條邊,這條邊連線的兩個點若是在不同的連通塊內,連邊後,聯通快個數就++。

#include

#include

using

namespace std;

const

int maxn =

4e5+5;

vector<

int> v[maxn]

;vector<

int> ans;

struct edgeedge[maxn]

;struct pointpoint[maxn]

;bool book[maxn]

;int n, m, k;

//並查集部分

int pre[maxn]

;int

getfather

(int u)

void

merge

(int u,

int v)

intmain()

cin >> k;

int x;

for(

int i =

1; i <= k;

++i)

int tot =0;

for(

int i =

1; i <= m;

++i)

else

}for

(int i =

0; i < n;

++i)

tot -

= k;

ans.

push_back

(tot)

;for

(int i = k; i >=1;

--i)

} tot++

; book[node]

=false

; ans.

push_back

(tot);}

int len = ans.

size()

;for

(int i = len-

1; i >=0;

--i)

return0;

}

第二題

這題並查集有兩個應用,因為每乙個點都只能有一次從0變到1,所以我們對於每一行可以維護乙個並查集,每個點指向右端第乙個0,這樣利用並查集「暴力修改」即可。然後總體的連通性再開乙個並查集維護

#include

#include

using namespace std;

const

int maxn =

4e5+5;

int tot;

int n, m, q;

char mp[

1005][

1005];

//並查集維護每一行的連通情況,每個連通塊最右端為0

int rt[

1005][

1005];

//right[i][j]代表第i行第j列的父親,根節點指向右邊第乙個0

intgetfirstzero

(int row,

int col)

void

link

(int row,

int u,

int v)

//並查集維護所有1塊的連通情況

int pre[

1005

*1005];

intgetfather

(int u)

intmerge

(int u,

int v)

}int

main()

mp[i]

[m+1]=

'0';

}//預處理每行連通塊情況

for(

int i =

1; i <= n;

++i)

}for

(int i =

1; i <= n;

++i)

}//預處理總體連通情況

for(

int i =

1; i <= n;

++i)

for(

int j =

1; j <= m;

++j)

pre[i*m+j]

= i*m+j;

for(

int i =

1; i <= n;

++i)}}

tot =0;

for(

int i =

1; i <= n;

++i)

}//輸入給定區域

cin >> q;

int x1, x2, y1, y2;

while

(q--)}

cout << tot << endl;

}return0;

}

並查集的應用

特點 1,都有乙個陣列儲存它的根節點 2,用vis陣列儲存其是否訪問過 3,如果cnt 1 說明該圖是連通的。連通圖中只有根節點的父節點是自身,cnt應該是1 解決的題目 1,題目已經給了圖上頂點之間的關係,通過頂點之間的關係,求連通分量的個數 include stdio.h int bin 100...

並查集及其應用

並查集 union find sets 是一種簡單的用途廣泛的集合.並查集是若干個不相交集合,能夠實現較快的合併和判斷元素所在集合的操作,應用很多,如其求無向圖的連通分量個數 最小公共祖先 帶限制的作業排序,還有最完美的應用 實現kruskar演算法求最小生成樹。其實,這一部分 演算法導論 講的很精...

並查集及其應用

並查集 union find sets 是一種簡單的用途廣泛的集合.並查集是若干個不相交集合,能夠實現較快的合併和判斷元素所在集合的操作,應用很多,如其求無向圖的連通分量個數 最小公共祖先 帶限制的作業排序,還有最完美的應用 實現kruskar演算法求最小生成樹。其實,這一部分 演算法導論 講的很精...