動態連通性

2021-08-20 04:41:29 字數 812 閱讀 8988

問題:一對整數p,q可以理解為「p與q是相連的」。問給出一組整數對p,q,判斷p,q是否相連,如果相連,則忽略,不想連則新增連線。

如: a->b->c->d 則此時認為abcd互相連線。如果新增另一組整數對a,c;則新增不成功,因為此時a,c已經連通;若新增另一組整數對a,f。則新增成功,此時a,b,c,d,f互相連通。

為了方便,我們將物件稱為觸點,將整數對稱為連線, 將有多少個連通稱為連通分量簡稱分量

給出演算法的api:

public class uf

uf(int n)                                      以整數標識(0->n-1)初始化n個觸點

int union(int p,int q)                    在p,q之間新增一條連線

int find(int p)                                p所在分量的識別符號

boolean connected(int p,int q)    如果p與q存在於同乙個分量中則返回true

int count()                                    連通分量的數量

具體實現**:

package test;

public class uf

}public int find(int p)

public boolean connected(int p,int q)

public int count()

public void union(int p,int q)}}

count--;}}

動態連通性問題

首先定義演算法的api 方法作用 uf int n 初始化觸點及其他資料 int find int p 返回p所在連通分量的識別符號 int union int p,int q 在p和q之間新增一條線 int count 返回連通分量的數量 boolean connected int p,int q...

動態連通性 union find演算法

等價關係 定義 p,q 表示p與q相連,是一種等價關係,具有自反性,對稱性以及傳遞性。等價關係定義了等價類,給定多個整數對,判斷其是否屬於同一類,即是否具有動態連通性。從集合的角度在處理 p,q 時,判斷其是否屬於不同的集合,如果屬於不同的集合則將p以及p所屬的集合進行合併。給定多個整數對,可以確定...

並查集,動態連通性

n,m n個點,m條邊 隨之而來m條邊 q 代表q個操作 q行,每行乙個序號,代表將第m個輸入的邊刪除,問刪除後有多少個連通塊。思路 我們將m條邊,和q詢問記錄下來,並將要刪除的邊標記。然後對那些不用的邊使用並查集,並算出有多少個連通塊。然後從最後乙個詢問開始,依次將那些邊加入並查集,如果加入時,兩...