Prim算法求最小生成树
作者:
amagi
,
2023-07-19 19:05:06
,
所有人可见
,
阅读 128
#include <iostream>
#include <cstring>
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ll long long
using namespace std;
const int N = 551;
ll x[N];
int n,m;
int xx[N][N];
int dis[N];
bool f[N];
void pre(){
memset(dis,0x3f,sizeof dis);
dis[1] = 0;
int res = 0;
for(int i = 1; i <= n; i ++){
int t = -1;
for(int j = 1; j <= n; j ++){
if(f[j] == false && (t == -1 || dis[t] > dis[j])){
t = j;
}
}
if(dis[t] >= 0x3f3f3f3f){
cout << "impossible" << endl;
return ;
}
f[t] = true;
res += dis[t];
for(int jj = 1; jj <= n; jj ++){
if(f[jj] == false && (dis[jj] > xx[t][jj])){
dis[jj] = xx[t][jj];
}
}
}
cout << res << endl;
return ;
}
void solve(){
cin >> n >> m;
memset(xx,0x3f,sizeof xx);
for(int i = 1; i <= m; i ++){
int u,v,w;
cin >> u >> v >> w;
xx[v][u] = xx[u][v] = min(xx[u][v],w);
}
pre();
return ;
}
int main(){
IOS
solve();
return 0;
}
66