7-10 公路村村通 (30分)
現有村落間道路的統計資料表中,列出了有可能建設成標準公路的若干條道路的成本,求使每個村落都有公路連通所需要的最低成本。
輸入格式:
輸入資料報括城鎮數目正整數n(≤1000)和候選道路數目m(≤3n);隨後的m行對應m條道路,每行給出3個正整數,分別是該條道路直接連通的兩個城鎮的編號以及該道路改建的預算成本。為簡單起見,城鎮從1到n編號。
輸出格式:
輸出村村通需要的最低成本。如果輸入資料不足以保證暢通,則輸出−1,表示需要建設更多公路。
輸入樣例:
6 15
1 2 5
1 3 3
1 4 7
1 5 4
1 6 2
2 3 4
2 4 6
2 5 2
2 6 6
3 4 6
3 5 1
3 6 1
4 5 10
4 6 8
5 6 3
輸出樣例:
12兩個方法
#include
#include
#include
#include
#include
using
namespace std;
const
int maxn=
5005
;const
int maxm=
200205
;int father[maxn]
;int n,m;
int mst;
struct node
}g[maxm]
;int
find
(int x)
void
merge
(int v,
int u)
boolk(
)int cnt;
cnt=mst=0;
sort
(g,g+m)
;for
(int i=
0;ireturn
false;}
intmain()
if(k(
))else cout<<
"-1"
}
#include
#include
#include
#include
using
namespace std;
const
int maxn=
1100
;const
int inf=
0x3f3f3f3f
;int n,m;
int adj[maxn]
[maxn]
;int cost[maxn]
,vis[maxn]
;int
prim()
cost[1]
=0;int res=0;
for(
int i=
1;i<=n;i++)}
vis[minn]=1
; res+
=cost[minn];if
(flag==0)
return-1
;for
(int i=
1;i<=n;i++)}
}return res;
}int
main()
memset
(adj,
0x3f
,sizeof
(adj));
for(
int i=
0;i)//if(prim()==inf)cout<<-1cout<<
prim()
}
PTA 公路村村通
現有村落間道路的統計資料表中,列出了有可能建設成標準公路的若干條道路的成本,求使每個村落都有公路連通所需要的最低成本。輸入資料報括城鎮數目正整數n 1000 和候選道路數目m 3n 隨後的m行對應m條道路,每行給出3個正整數,分別是該條道路直接連通的兩個城鎮的編號以及該道路改建的預算成本。為簡單起見...
公路村村通
公路村村通 kruscal 演算法 include include include using namespace std int per 1010 n,m struct node 結構體來儲存邊 x 5005 bool cmp node a,node b int find int x 並查集的查詢...
公路村村通
現有村落間道路的統計資料表中,列出了有可能建設成標準公路的若干條道路的成本,求使每個村落都有公路連通所需要的最低成本。輸入資料報括城鎮數目正整數 n 和候選道路數目 m 隨後的 m行對應 m條道路,每行給出3個正整數,分別是該條道路直接連通的兩個城鎮的編號以及該道路改建的預算成本。為簡單起見,城鎮從...