usingnamespacestd; constint N = 510, INF = 0x3f3f3f3f; int n, m; int g[N][N]; // dist[i] 表示i点到集合点的最近距离 // st[i] 为true为一个集合,false 为一个集合 int dist[N]; bool st[N];
intprim() { memset(dist, 0x3f, sizeof dist); int res = 0;
for(int i = 0; i < n; i++) { int t = -1; for(int j = 1; j <= n; j++) if (!st[j] && (t == -1 || dist[j] < dist[t])) t = j;
st[t] = true; if (i && dist[t] == INF) return INF; if (i) res += dist[t]; for(int j = 1; j <= n; j++) dist[j] = min(dist[j], g[t][j]); } return res; }
intmain() { cin >> n >> m; memset(g, 0x3f, sizeof g); while(m--) { int a, b, c; cin >> a >> b >> c; g[a][b] = g[b][a] = min(g[a][b], c); }
int res = prim(); if (res == INF) puts("impossible"); elsecout << res << endl; return0; }