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...