HDU 1879 最小生成樹

2022-05-06 14:48:08 字數 1002 閱讀 3597

problem description

省**「暢通工程」的目標是使全省任何兩個村莊間都可以實現公路交通(但不一定有直接的公路相連,只要能間接通過公路可達即可)。現得到城鎮道路統計表,表中列出了任意兩城鎮間修建道路的費用,以及該道路是否已經修通的狀態。現請你編寫程式,計算出全省暢通需要的最低成本。

input

測試輸入包含若干測試用例。每個測試用例的第1行給出村莊數目n ( 1< n < 100 );隨後的 n(n-1)/2 行對應村莊間道路的成本及修建狀態,每行給4個正整數,分別是兩個村莊的編號(從1編號到n),此兩村莊間道路的成本,以及修建狀態:1表示已建,0表示未建。

當n為0時輸入結束。

output

每個測試用例的輸出佔一行,輸出全省暢通需要的最低成本。

sample input

31 2 1 0

1 3 2 0

2 3 4 0

31 2 1 0

1 3 2 0

2 3 4 1

31 2 1 0

1 3 2 1

2 3 4 1

0sample output31

0最小生成樹,kruskal演算法 

這裡下標應該是1開始的,我竟然從0開始,於是,wrong了幾次,- -! 

ac code:

#include #include #include using namespace std;

// 定義圖的最大頂點數

#define maxvertexnum 105

// 定義圖的最大邊數

#define maxedgenum 105*52+2

struct edge

;edge edgeset[maxedgenum];

int kruskal(edge e[maxedgenum],edge c[maxedgenum],const int& vertexs)

// 最小生成樹的邊數

k=0;

d=0;

while(k

hdu 1879 最小生成樹 prim演算法實現

這題好詭異,用g 直接超時,c 也就400ms過。說一下最小生成樹的prim演算法 按照我的理解,它的主要思想就是說 任意取乙個點 通常是第乙個 用乙個dis i 來儲存終點為 i 的到生成樹中任意一點的最小的距離,在已經加入生成樹的節點外找乙個點,這個點到生成樹的距離要是最小,不論是到生成樹的哪乙...

HDU 1879 繼續暢通工程 最小生成樹

省 暢通工程 的目標是使全省任何兩個村莊間都可以實現公路交通 但不一定有直接的公路相連,只要能間接通過公路可達即可 現得到城鎮道路統計表,表中列出了任意兩城鎮間修建道路的費用,以及該道路是否已經修通的狀態。現請你編寫程式,計算出全省暢通需要的最低成本。測試輸入包含若干測試用例。每個測試用例的第1行給...

HDU 1879 繼續暢通工程 最小生成樹

思路 比較典型的求最小生成樹,利用k演算法或者p演算法,如果在輸入時兩個村莊的修建狀態為 已修建,那麼我這裡的做法是讓他們之間的權值為 0,即修建費用為 0 然後套用演算法就好了。p演算法 1 include 2 include 3 include 4 include 5 include 6 inc...