#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
int road[1005][1005];
int visit[1005];
int cost[1005];
int n,m,total;
int prime()
{
int i,j,k,t,f;
visit[1]=1;
for(i=1;i<=n;i++)
{
cost[i]=road[i][1];
}
for(i=2;i<=n;i++)
{
t=inf;
for(j=1;j<=n;j++)
{
if(!visit[j]&&cost[j]<t)
{
t=cost[j];
k=j;
}
}
if(t==inf)
{
f=1;
break;
}
visit[k]=1;
total+=t;
for(j=1;j<=n;j++)
{
if(!visit[j]&&cost[j]>road[j][k])
cost[j]=road[j][k];
}
}
if(f)
printf("%d\n",total);
else
printf("-1\n");
}
int main()
{
int i,u,v,c;
while(~scanf("%d %d",&n,&m))
{
total=0;
memset(road,inf,sizeof(road));
memset(visit,0,sizeof(visit));
memset(cost,0,sizeof(cost));
for(i=1;i<=m;i++)
{
scanf("%d %d %d",&u,&v,&c);
road[u][v]=c;
road[v][u]=c;
}
prime();
}
return 0;
}
数据结构实验之图论六:村村通公路
最新推荐文章于 2018-06-18 17:50:54 发布