題目:
暢通工程
time limit: 1000/1000 ms (j**a/others) memory limit: 32768/32768 k (j**a/others)
total submission(s): 36652 accepted submission(s): 16298
problem description
省**「暢通工程」的目標是使全省任何兩個村莊間都可以實現公路交通(但不一定有直接的公路相連,只要能間接通過公路可達即可)。經過調查評估,得到的統計表中列出了有可能建設公路的若干條道路的成本。現請你編寫程式,計算出全省暢通需要的最低成本。
input
測試輸入包含若干測試用例。每個測試用例的第1行給出評估的道路條數 n、村莊數目m ( < 100 );隨後的 n
行對應村莊間道路的成本,每行給出一對正整數,分別是兩個村莊的編號,以及此兩村莊間道路的成本(也是正整數)。為簡單起見,村莊從1到m編號。當n為0時,全部輸入結束,相應的結果不要輸出。
output
對每個測試用例,在1行裡輸出全省暢通需要的最低成本。若統計資料不足以保證暢通,則輸出「?」。
sample input
3 31 2 1
1 3 2
2 3 4
1 32 3 2
0 100
sample output3?
思路:**:
#include #include#include
using
namespace
std;
const
int size = 100 + 1
;const
int max = 0x3f3f3f3f
;struct
edge
};vector
graph[size];
intminfee[size];
bool
marked[size];
int count = 1
;int ans = 0
;bool prim(int x, int
m)
int min =max;
intindex;
for(int i = 1; i <= m; i++)//
找當前最小費用及其下標
}if(min == max)//
若未找到最短路,則不連通
return
false
;
//新增當前最短路
marked[index] = true
; count++;
ans+=min;
prim(index, m);
}int
main()
for(int i = 0; i < size; i++)
graph[i].clear();
//輸入
for(int i = 0; i < n; i++)
if(prim(1
, m))
printf(
"%d\n
", ans);
else
printf(
"?\n");
}return0;
}
還是暢通工程 最小生成樹 Prim演算法
includeusing namespace std 測試輸入包含若干測試用例。每個測試用例的第1行給出村莊數目n 100 隨後的n n 1 2行對應村莊間的距離,每行給出一對正整數,分別是兩個村莊的編號,以及此兩村莊間的距離。為簡單起見,村莊從1到n編號。當n為0時,輸入結束,該用例不被處理。in...
暢通工程(最小生成樹)
首先要判斷能否構成生成樹,剛開始的思路是用hash遍歷城市,看是否所有的城市都記錄進取,被測試資料誤導,如果給這組資料 1,2 3,4 這麼沒辦法構成單樹。include include const int inf 0x7fffffff const int maxn 110 int hash max...
還是暢通工程 最小生成樹
題目描述 某省調查鄉村交通狀況,得到的統計表中列出了任意兩村莊間的距離。省 暢通工程 的目標是使全省任何兩個村莊間都可以實現公路交通 但不一定有直接的公路相連,只要能間接通過公路可達即可 並要求鋪設的公路總長度為最小。請計算最小的公路總長度。輸入 測試輸入包含若干測試用例。每個測試用例的第1行給出村...