HDU 1863 暢通工程 (mst)

2021-06-28 15:56:13 字數 454 閱讀 2173

題目大意:給出n條路,m個村莊,n行對應村莊及其道路成本,求得是所有村莊連通的最小花費。

思路分析:用克魯斯卡爾演算法(kruskal algorithm),其思想是把每兩個點的邊存下來,按權值從小到大排序,按邊來加點,每當生成一天mst的邊時,合併這個邊的兩個頂點,而判斷這條邊能否成為mst的一條邊的判斷依據就是邊的兩個頂點是否已連通,如果連通則繼續下一條;如果不連通,那麼就選擇使其連通。當所有的點都連通時就生成了而乙個mst。

**實現:

#include#include#includeusing namespace std;

const int maxn=10000;

int father[110];

int n,m;

struct node

}edge[maxn];

int cmp(node a,node b){

return a.val

HDU 1863 暢通工程

include include include using namespace std const int maxn 5000 5 int n,m,ans,cnt bool flag struct streat edge maxn int root 105 int find int x void k...

hdu 1863 暢通工程

傳送門給定n個村子,和m個可能要修的道路,現在要求連線這n個村子的最小成本,如果 無法構成一顆最小生成樹,則輸出?這題典型的最小生成樹模板題,krusal演算法和prim演算法都可以達到要求 並且這題的資料量不大,並且是完全圖,利用鄰接矩陣做就好 include const int maxn 1e2...

hdu1863 暢通工程

題目鏈結 本題和還是暢通工程思路非常類似。區別在於後者給的圖的邊數為n n 1 2,是乙個無向完全圖,一定能找到乙個最小生成樹。而前者給的邊數不定,所以不一定能生成乙個最小生成樹,需要判斷。所用知識點 kruskal演算法 最小生成樹 並查集 如下 include include includeus...