HDU T1233 还是畅通工程
题解:
裸题,没啥好说的,直接上Prim模版
代码:
#include<cstdio>
#include<algorithm>
#define maxn 105
#define INF 0x3f3f3f3f
using namespace std;
int n,sum,dis[maxn];
int maps[maxn][maxn];
bool vis[maxn];
void init(){
sum = 0;
for(int i = 1; i <= n ; i++){
dis[i] = INF;
vis[i] = false;
for(int j = 1; j <= i; j++)
i == j ? maps[i][j] = 0 : maps[i][j] = maps[j][i] = INF;
}
}
void Prim(int s){
dis[s] = 0;
for(int i = 1; i <= n ; i++){
int p = 0, minn = INF;
for(int j = 1; j <= n; j++){
if(!vis[j] && minn > dis[j]){
p = j;
minn = dis[j];
}
}
vis[p] = true;
sum += dis[p];
for(int j = 1; j <= n ; j++){
if(!vis[j] && dis[j] > maps[p][j])
dis[j] = maps[p][j];
}
}
}
int main(){
int u,v,c;
while(scanf("%d",&n),n){
init();
for(int i = 1; i <= n*(n-1)/2; i++){
scanf("%d%d%d",&u,&v,&c);
maps[v][u] = maps[u][v] = min(maps[u][v],c);
}
Prim(1);
printf("%d\n",sum);
}
return 0;
}