int fa[N]; inlinevoidinit(int n){ for (int i = 1; i <= n; ++i) fa[i] = i; } intfind(int x){ return x == fa[x] ? x : (fa[x] = find(fa[x])); } inlinevoiduno(int x, int y){ fa[find(x)] = find(y); }
voideachT(){ int n = read(); init(n);
vector<tuple<int, int, int> > E; for (int m = read(); m--; ) { int u = read(), v = read(), w = read(); E.push_back({ w,u,v }); } sort(E.begin(), E.end());
int ans = 0; // 边权之和 for (auto [w, u, v] : E) { if (find(u) != find(v)) { ans += w; uno(u, v); } } print(ans); }
voideachT(){ int n = read(); for (int i = 1; i <= n; ++i) for (int j = 1; j <= n; ++j) E[i][j] = read(); vis[1] = 1; dis[1] = 0; int ans = 0; for (int u = 1; u <= n; ++u) { int v = 1, mn = 1e9; for (int i = 1; i <= n; ++i) if (!vis[i] && dis[i] < mn) v = i, mn = dis[i]; vis[v] = 1; ans += dis[v]; for (int i = 1; i <= n; ++i) dis[i] = min(dis[i], E[v][i]); } print(ans); }
structnode { int y, w; booloperator<(const node& _) const { return w > _.w; } }; vector<node> E[N]; int vis[N];
voideachT(){ int n = read(); for (int m = read(); m--; ) { int u = read(), v = read(), w = read(); E[u].push_back({ v, w }); E[v].push_back({ u, w }); }
int ans = 0; // 边权之和 priority_queue<node> Q; Q.push({ 1,0 }); while (!Q.empty()) { auto [u, w] = Q.top(); Q.pop(); if (!vis[u]) { vis[u] = 1; ans += w; for (auto [v, w] : E[u]) { if (!vis[v]) Q.push({ v,w }); } } } print(ans); }