首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

HDU 1233:還是暢通工程(最小生成樹 Prim & Kruskal 雙解)

     編輯:C++ 入門

問題:N 個村莊,給出所有兩兩距離。求連通所有村莊的最小公路總長度(MST)。

Prim 算法 (鄰接矩陣 O(N²))

int Prim(int start) {
    low[start] = 0; vis[start] = 1;
    for (i=1..N) low[i] = map[start][i];
    for (j=1; j

Kruskal 算法 (邊排序 + 並查集 O(E log E))

struct Edge { int u, v, w; };
sort(edges, edges+M, [](Edge a, Edge b){ return a.w < b.w; });
for (e : edges)
    if (union(e.u, e.v)) ans += e.w;

代碼對比

  • Prim 矩陣版 134ms,適合稠密圖 (本題給全距離矩陣)。
  • Prim 鏈表版 250ms。
  • Kruskal 296ms,適合稀疏圖。

本題 N<100,邊數 N(N-1)/2 ≈ 5000,Prim 矩陣最快。注意輸入用 scanf 加速。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved