Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <set>
- #include <vector>
- #include <deque>
- #include <map>
- #include <cmath>
- #include <random>
- #include <algorithm>
- #define se second
- #define fi first
- #define mp make_pair
- #define pb push_back
- typedef long long ll;
- typedef long double ld;
- using namespace std;
- int main() {
- int n, m;
- cin >> n >> m;
- vector<pair<int, pair<int, int>>> vert(m);
- for (int i = 0; i < m; i++) {
- int x, y, w;
- cin >> x >> y >> w;
- x--, y--;
- vert[i] = {w, {x, y}};
- }
- vector<bool> used(n, false);
- used[0] = true;
- vector<pair<int, int>> ostov;
- int answ = 0;
- for (int _ = 0; _ < n - 1; _++) {
- pair<int, pair<int, int>> mn = {10000000, {-1, -1}};
- for (int i = 0; i < m; i++) {
- if (used[vert[i].se.fi] != used[vert[i].se.se]) {
- mn = min(mn, vert[i]);
- }
- }
- ostov.push_back(mn.se);
- answ += mn.fi;
- used[mn.se.fi] = true;
- used[mn.se.se] = true;
- }
- cout << answ << '\n';
- for (auto e : ostov) {
- cout << e.fi + 1 << ' ' << e.se + 1 << '\n';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment