並查集 最小(最大)生成樹

2021-08-04 11:45:09 字數 1066 閱讀 6773

首先給出並查集基本**:

int fa[maxn],rank[maxn];  

//基礎陣列,fa陣列儲存上乙個節點,rank表示節點級數(比較少用)

//初始化

void init(int n)

}

//查詢

int find(int x)

void combine(int a,int b)

}

//判斷

bool issame(int a,int b)

最小生成樹個人比較喜歡

kruskal演算法:

int kruskal( )

}return res;

}

上面使用了sort(),可以根據題目要求(最大還是最小)自定義比較函式:

下面是模板:

從小到大排列(返回為真,左值優先)

若為最大生成樹把小於換成大於即可

bool cmp1(const edge& a,const edge& b){

return a.cost

注意:在結構體內過載小於號操作符後,同時完成了== 操作符,無需再次過載,但需要用到比較函式時,不能先過載==和!=等操作符,必須支援《操作符

bool operator < (const edge &b)const{

return cost

並查集(最小生成樹)

時間限制 1000 ms 記憶體限制 65536 kb 題目描述 有一張城市地圖,圖中的頂點為城市,無向邊代表兩個城市間的連通關係,邊上的權為在這兩個城市之間修建高速公路的造價,研究後發現,這個地圖有乙個特點,即任一對城市都是連通的。現在的問題是,要修建若干高速公路把所有城市聯絡起來,問如何設計可使...

最小生成樹 並查集練習

叢林中的路 熱帶島嶼lagrishan的首領現在面臨乙個問題 幾年前,一批外援資金被用於維護村落之間的道路,但日益繁茂的叢林無情的侵蝕著村民的道路,導致道路維修開銷巨大,長老會不得不放棄部分道路的維護。已經知道了每條路每個月的維修費用 單位為aacms 現在長老會需要提出一種方案,即需要保證村落之間...

並查集 最小生成樹(prim kruskal)

並查集,從名字上來看可以知道,是乙個集合,而且這個集合可以合併和查詢。查詢,主要是查詢集合中的某乙個元素的祖先是誰,某一些元素是不是擁有相同的祖先。合併,是把兩個不想交的集合合併為乙個集合。並查集的思想就是朋友的朋友就是朋友 雖然現實生活中並不是這樣 並查集的第一步初始化,自己是自己的祖先。乙個人來...