测试情况
#include<bits/stdc++.h>
using namespace std;
const long long INF=0x3f3f3f3f;
const long long N=1e5+10;
long long a[1005][1005];
bool vis[N];
long long dis[N];
int n,m;
long long ans;
void prim(){
dis[1]=0;
for(int i=1;i<=n;i++)
{
int t=-1;
for(int j=1;j<=n;j++)
if(!vis[j] && (t==-1 || dis[t]>dis[j]))
t=j;
if(dis[t]==INF)
{
ans=INF;
return ;
}
ans+=dis[t];
vis[t]=1;
for(int j=1;j<=1000;j++)
{
if(!vis[j] && dis[j]>a[t][j])
{
dis[j]=a[t][j];
}
}
}
return ;
}
int main(){
memset(a,INF,sizeof(dis));
memset(dis,INF,sizeof(dis));
cin>>n>>m;
for(int i=1;i<=m;i++)
{
long long x,y,z;
cin>>x>>y>>z;
a[x][y]=a[y][x]=min(a[x][y],z);
}
prim();
if(ans==INF)cout<<"impossible";
else cout<<ans;
return 0;
}