HDU - 1233 - 還是暢通工程 (最小生成樹!!)
還是暢通工程
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 27443 Accepted Submission(s): 12212
Problem Description
某省調查鄉村交通狀況,得到的統計表中列出了任意兩村莊間的距離。省政府“暢通工程”的目標是使全省任何兩個村莊間都可以實現公路交通(但不一定有直接的公路相連,只要能間接通過公路可達即可),並要求鋪設的公路總長度為最小。請計算最小的公路總長度。
Input
測試輸入包含若干測試用例。每個測試用例的第1行給出村莊數目N ( < 100 );隨後的N(N-1)/2行對應村莊間的距離,每行給出一對正整數,分別是兩個村莊的編號,以及此兩村莊間的距離。為簡單起見,村莊從1到N編號。
當N為0時,輸入結束,該用例不被處理。
Output
對每個測試用例,在1行裡輸出最小的公路總長度。
Sample Input
3
1 2 1
1 3 2
2 3 4
4
1 2 1
1 3 4
1 4 1
2 3 3
2 4 2
3 4 5
0
Sample Output
3
5
HintHint
Huge input, scanf is recommended.
Source
浙大計算機研究生復試上機考試-2006年
多做幾個,熟悉熟悉!!
AC代碼:
#include
#include
#include
#define INF 0x7f7f7f7f
using namespace std;
int map[105][105], vis[105], dis[105];
int n;
void prim()
{
for(int i=1; i<=n; i++)
dis[i] = map[1][i];
vis[1] = 1; dis[1] = 0;
int sum = 0, pos;
for(int i=1; i