代码:
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
const int N=1010;
struct node{
int nxt,w;
bool operator <(const node &n1)const{
if(w==n1.w) return nxt<n1.nxt;
return w>n1.w;
}
};
vector<node>e[N];
int n,m,cont,ans;
int vst[N];
void prim(){
priority_queue<node>pq;
for(auto x:e[1]){
pq.push(x);
} vst[1]=1; cont=1;
while(pq.size()){
node u=pq.top(); pq.pop();
if(vst[u.nxt]) continue;
vst[u.nxt]=1; ans+=u.w; cont++;
for(auto x:e[u.nxt]){
if(vst[x.nxt]) continue;
pq.push(x);
}
}
}
int main(){
cin>>n>>m;
for(int i=0;i<m;i++){
int x,y,num; scanf("%d%d%d",&x,&y,&num);
e[x].push_back({y,num});
e[y].push_back({x,num});
}
if(m<n){
cout<<"-1"; return 0;
}
prim();
if(cont!=n) cout<<"-1";
else cout<<ans;
return 0;
}