Descripción
Hay n ciudades, algunas de las cuales pueden construir carreteras entre ciudades, diverso coste de la construcción de carreteras es diferente. Ahora queremos saber, la cantidad de dinero que pasar al menos reparar las carreteras se pueden vincular a toda la ciudad, por lo que una salida en cualquier ciudad, se puede llegar a cualquier otra ciudad.
Entrada
Que comprende una pluralidad de conjuntos de formato de datos de entrada.
La primera fila comprende dos enteros nm, y el número representativo del número de la construcción de carreteras urbanas posible. (N <= 100, m <= 10.000)
M líneas cada tres no negativos números enteros restante del ABC, se puede construir una carretera entre las ciudades y representantes urbanas b, la consideración C (ciudad numeradas de 1 a n).
Salida
Cada grupo de salidas por línea, sólo el costo mínimo de salida.
muestra
Entrada
3 2
1 2 1
1 3 1
1 0
Salida
2
0
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#define INF 0x3f3f3f3f
int dis[110],Map[110][110];
int vis[110];
int n,m;
int prim()
{
int sum = 0;
for(int i=1; i<=n; i++)
{
dis[i] = Map[1][i];
}
vis[1] = 1;
for(int i=2; i<=n; i++)
{
int flag;
int Min = INF;
for(int j=1; j<=n; j++)
{
if(!vis[j]&&dis[j]<Min)
{
Min = dis[j];
flag = j;
}
}
vis[flag] = 1;
sum += Min;
for(int j=1; j<=n; j++)
{
if(!vis[j]&&dis[j]>Map[flag][j])
{
dis[j] = Map[flag][j];
}
}
}
return sum;
}
int main()
{
int u,v,w;
while(~scanf("%d %d",&n,&m))
{
memset(vis,0,sizeof(vis));
memset(Map,INF,sizeof(Map));
memset(dis,INF,sizeof(dis));
for(int i=0; i<m; i++)
{
scanf("%d %d %d",&u,&v,&w);
if(Map[u][v]>w)//注意这里一定要有 否则WA
Map[u][v] = Map[v][u] = w;
}
int k = prim();
printf("%d\n",k);
}
return 0;
}