还是畅通工程(最小生成树)
HDU 1233
模板题,稠密图,用Prim算法
//稠密图, prim
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
const int maxn = 105;
int e[maxn][maxn], vis[maxn], dis[maxn];
int n, u, v, w, mst;
void prim(){
for(int i = 1; i <= n; i++){
int u = -1, minn = inf;
for(int j = 1; j <= n; j++){
if(!vis[j] && dis[j] < minn){
minn = dis[j];
u = j;
}
}
if(u == -1) return;
vis[u] = 1;
for(int v = 1; v <= n; v++){
if(!vis[v] && dis[v] > e[u][v]){
dis[v] = e[u][v];
}
}
}
mst = 0;
for(int i = 1; i <= n; i++)
mst += dis[i];
}
int main(){
while(cin >> n){
if(n == 0) return 0;
memset(e, 0, sizeof(e));
memset(vis, 0, sizeof(vis));
for(int i = 1; i <= n*(n-1)/2; i++){
cin >> u >> v >> w;
e[u][v] = w;
e[v][u] = w;
}
for(int i = 1; i <= n; i++)
dis[i] = e[1][i];
prim();
cout << mst << endl;
}
}