1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| #include<bits/stdc++.h> using namespace std;
const int N=505 const int INF=0x3f3f3f3f; int n,m int ans=0; int v[N][N] int d[N]; bool book[N]={0};
void init(){ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ v[i][j]=INF; } d[i]=INF; } for(int i=1;i<=m;i++){ int x,y,z; cin>>x>>y>>z; if(x!=y){ v[x][y]=min(z,v[x][y]); v[y][x]=min(z,v[y][x]); } } }
void prim(){ book[1]=1; d[1]=0; for(int i=2;i<=n;i++)d[i]=min(v[1][i],d[i]); for(int i=2;i<=n;i++){ int temp=INF; int t=-1; for(int j=2;j<=n;j++){ if(!book[j]&&d[j]<temp){ temp=d[j]; t=j; } } if(t==-1){ ans=INF; return; } ans+=temp; book[t]=1; for(int j=2;j<=n;j++){ d[j]=min(d[j],v[t][j]); } } }
int main(void){ cin>>n>>m; init(); prim(); if(ans==INF){ cout<<"impossible"; }else{ cout<<ans; } }
|