Pagini recente » Cod sursa (job #955634) | Cod sursa (job #772251) | Cod sursa (job #2523082) | Cod sursa (job #736269) | Cod sursa (job #2512538)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
int n, m;
struct muc{
int a, b, v;
bool operator<(const muc &rhs){
return v < rhs.v;
}
};
muc muci[400041];
int tre[200041];
void nuke(){
for(int i = 1; i <= n; ++i){
tre[i] = i;
}
}
vector<muc> sol;
int dad(int a){
int r = a;
if(a != tre[a]){
r = dad(tre[a]);
tre[a] = r;
}
return r;
}
void reu(int a, int b){
a = dad(a);
b = dad(b);
tre[a] = b;
}
bool tog(int a, int b){
a = dad(a);
b = dad(b);
return (a==b);
}
int sumy(){
int s = 0;
for(auto x : sol){
s += x.v;
}
return s;
}
int main(){
fin >> n >> m;
for(int i = 0; i < m; ++i){
muc &x = muci[i];
fin >> x.a >> x.b >> x.v;
}
sort(muci, muci+m);
nuke();
for(int i = 0; i < m; ++i){
muc x = muci[i];
if(!tog(x.a, x.b)){
reu(x.a, x.b);
sol.push_back(x);
}
}
fout << sumy() << "\n";
fout << sol.size() << "\n";
for(auto x : sol){
fout << x.a << " " << x.b << "\n";
}
return 0;
}