C 繼續暢通工程 最小生成樹

2022-05-03 14:33:15 字數 1050 閱讀 5605

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

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

當n為0時輸入結束。output每個測試用例的輸出佔一行,輸出全省暢通需要的最低成本。sample input

3

1 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

0

sample output

310

這個題目給了路徑的條數,所以最好用kruskal

#include #include #include #include using namespace std;

const int maxn=5050;

int n,m,cnt=0;

int f[maxn];

struct node

}exa[maxn];

void init()

int findx(int x)

void unite(int a,int b)

bool same(int x,int y)

bool cmp(node a,node b)

int kruskal()

return res;

}int main()

// printf("%d\n",cnt);

printf("%d\n",kruskal());

} return 0;

}

kruscal求最小生成樹 繼續暢通工程

kruscal求最小生成樹用到的知識 圖的邊的結構體 按邊權排序 並查集 不產生迴路 但是這道題仍然需要精心思考,原因是有一些邊是 已經存在的 那麼在計算最小生成樹成本的時候應該只考慮未修成的邊。要注意兩個易錯點 多組資料,並查集father陣列要初始化,一些全域性陣列要初始化。由於有些邊已經存在,...

暢通工程(最小生成樹)

首先要判斷能否構成生成樹,剛開始的思路是用hash遍歷城市,看是否所有的城市都記錄進取,被測試資料誤導,如果給這組資料 1,2 3,4 這麼沒辦法構成單樹。include include const int inf 0x7fffffff const int maxn 110 int hash max...

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

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