提交时间:2022-07-29 17:27:43

运行 ID: 54840

#include<bits/stdc++.h> using namespace std; struct edge{ int v,a,b; }; int n,m,ans; edge e[200001]; bool f[100001]; void input(){ scanf("%d %d",&n,&m); for(int i=1;i<=m;i++) scanf("%d %d %d",&e[i].a,&e[i].b,&e[i].v); } bool cmp(edge a,edge b){ return a.v<b.v; } void kruskal(){ sort(e+1,e+m+1,cmp); for(int i=1;i<=m;i++){ if(f[e[i].a]+f[e[i].b]<2){ f[e[i].a]=f[e[i].b]=1; ans+=e[i].v; } } } void output(){ for(int i=1;i<=n;i++){ if(!f[i]){ printf("impossible"); return; } } printf("%d",ans); } int main(){ input();kruskal();output(); return 0; }