题目来源:pta畅通工程之最低成本建设问题
#include<bits/stdc++.h>
using namespace std;
int n,m;
int cnt = 0;
int ans = 0;
struct node{
int id,w;
node(int a,int b){id = a,w = b;}
bool operator<(const node& n1)const{
return w > n1.w;
}
};
map<int,int>mp;
vector<node>v[1005];
void prim(){
priority_queue<node>q;
q.push(node(1,0));
while(!q.empty()){
node x = q.top();
q.pop();
if(mp[x.id] == 1)
continue;
mp[x.id] = 1;
ans += x.w;
for(int i = 0;i<v[x.id].size();i++){
if(mp[v[x.id][i].id] != 1)
q.push(node(v[x.id][i].id,v[x.id][i].w));
}
cnt++;
if(cnt == n)
break;
}
if(cnt != n){
cout << "Impossible"<<endl;
}
else
cout << ans;
}
int main(){
cin >> n >> m;
for(int i = 1;i <=m;i++){
int x,y,z;
cin >> x >> y >> z;
v[x].push_back(node(y,z));
v[y].push_back(node(x,z));
}
prim();
}