#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
int dis[1010];
int Edge[1010][1010];
bool visited[1010];
int n, m;
int Prim()
{
memset(visited, false, sizeof(visited));
for(int i = 1; i <= n; i ++)
{
dis[i] = Edge[1][i];
}
int sum = 0;
visited[1] = true;
for(int i = 1; i < n; i++)
{
long long int m = INF;
int pos;
for(int j = 1; j <= n; j++)
{
if(!visited[j] && dis[j] < m)
{
m = dis[pos = j];
}
}
visited[pos] = true;
sum += dis[pos];
if(m == INF)
{
return sum = -1;
}
for(int j = 1; j <= n; j ++)
{
if(!visited[j] && dis[j] > Edge[pos][j])
{
dis[j] = Edge[pos][j];
}
}
}
return sum;
}
int main()
{
while(cin >> n >> m)
{
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
(i == j)?Edge[i][j]=0:Edge[i][j] = INF;
}
int u, v, w;
while(m --)
{
cin >> u >> v >> w;
if(Edge[u][v] > w)
{
Edge[u][v] = Edge[v][u] = w;
}
}
cout << Prim() << endl;
}
return 0;
}
SDUT 3362 村村通公路
最新推荐文章于 2019-05-14 22:04:14 发布