Pagini recente » Cod sursa (job #1219213) | Cod sursa (job #2393529) | Solutii Summer Challenge, Runda 2 | Cod sursa (job #1746100) | Cod sursa (job #1928615)
#include <bits/stdc++.h>
#define z(x) (x & (-x))
typedef long long ll;
using namespace std;
ll sum, n, m, p[200100];
struct my{int x, y, c;} A[200100];
int find(int a){return (p[a] == a ? a : find(p[a]));}
void unite(int a, int b){p[find(b)] = find(a);}
bool cmp(my a, my b){return a.c < b.c;}
vector < pair< int,int > > R;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
ifstream cin("apm.in");
ofstream cout("apm.out");
cin >> n >> m;
for (int i = 1; i <= m; i++)
cin >> A[i].x >> A[i].y >> A[i].c;
for (int i = 1; i <= n; i++) p[i] = i;
sort(A+1, A+m+1, cmp);
for (int i = 1; i <= m; i++) if(find(A[i].x) != find(A[i].y)) sum += A[i].c, R.push_back({A[i].x, A[i].y}), unite(A[i].x, A[i].y);
cout << sum << "\n" << R.size() << "\n";
for (auto it : R) cout << it.first << " " << it.second << "\n";
return 0;
}