思路:
代码:
#include <iostream>
#include <cstring>
#include <queue>
#include <cstdio>
#include <algorithm>
#define INF 0x3f3f3f3f
using namespace std;
const int maxn = 55;
int P,R;
int ans;
int mp[maxn][maxn];
int dis[maxn];
int vis[maxn];
struct NODE{
int id;
int dis;
friend bool operator > (NODE a,NODE b){
return a.dis > b.dis;
}
NODE(int id,int dis) : id(id) , dis(dis) {} ;
};
priority_queue<NODE , vector<NODE> , greater<NODE> > Q;
void INIT(){
ans = 0;
memset(vis , 0 , sizeof(vis));
memset(dis , INF , sizeof(dis));
memset(mp , INF , sizeof(mp));
return ;
}
void PRIM(){
dis[1] = 0;
Q.push(NODE(1,0));
while(Q.size()){
NODE cur = Q.top() ; Q.pop() ;
int id = cur.id ;
if(!vis[id]){
vis[id] = true;
ans += dis[id];
for(int j=1;j<=P;j++)
if(dis[j] > mp[id][j]){
dis[j] = mp[id][j];
Q.push(NODE(j , dis[j]));
}
}
}
return ;
}
int main(){
while(cin>>P && P){
cin>>R;
INIT();
for(int i=1;i<=R;i++){
int l,r,w;
scanf("%d%d%d" , &l , &r , &w);
mp[l][r] = mp[r][l] = min(mp[l][r] , w);
}
PRIM();
cout<<ans<<endl;
}
return 0;
}