#include#include using namespace std; const int N = 1e3 + 10, M = 3 * N; int n, m; //nums of village, road int p[N]; //父亲 struct Edge{ int a, b, w; bool operator <(const Edge &tmp)const { return w < tmp.w; } }edges[M]; //并查集 int find(int u) { if(u != p[u]) p[u] = find(p[u]); return p[u]; } int Kruskal() { for(int i = 0; i < N; i++) p[i] = i; //初始化并查集 sort(edges, edges + m); //排序 int res = 0, cnt = 0; for(int i = 0; i < m; i++) { int a = edges[i].a, b = edges[i].b, w = edges[i].w; a = find(a), b = find(b); if(a != b) //未连通 { p[b] = a; res += w; cnt ++; } } if(cnt < n - 1) return -1; else return res; } int main() { //读取输入 cin >> n >> m; for(int i = 0; i < m; i++) cin >> edges[i].a >> edges[i].b >> edges[i].w; cout << Kruskal(); return 0; }



