Pagini recente » Cod sursa (job #196649) | Cod sursa (job #1884242) | Cod sursa (job #155854) | Cod sursa (job #244435) | Cod sursa (job #3199484)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("apm.in");
ofstream out("apm.out");
struct ura{
int nod1, nod2, cost;
}graf[400001];
struct ura2{
int nodd1, nodd2;
}rez[400001];
int tata[200001];
bool cmp(ura x, ura y){
if(x.cost < y.cost)
return true;
return false;
}
int sef(int t){
if(tata[t] == t)
return t;
return tata[t] = sef(tata[t]);
}
void unire(int a, int b){
tata[sef(a)] = sef(b);
}
int main()
{
int n, m;
in >> n >> m;
for(int i = 1; i <= m; i++){
int nd1, nd2, cst;
in >> nd1 >> nd2 >> cst;
graf[i].nod1 = nd1;
graf[i].nod2 = nd2;
graf[i].cost = cst;
}
for(int i = 1; i <= n; i++)
tata[i] = i;
sort(graf + 1, graf + m + 1, cmp);
int sum = 0;
int nrMuchii = 0;
for(int i = 1; i <= m && nrMuchii != n - 1; i++){
if(tata[graf[i].nod1] != tata[graf[i].nod2]){
sum += graf[i].cost;
nrMuchii++;
rez[nrMuchii].nodd1 = graf[i].nod1;
rez[nrMuchii].nodd2 = graf[i].nod2;
unire(graf[i].nod1, graf[i].nod2);
}
}
out << sum << "\n" << nrMuchii << "\n";
for(int i = 1; i <= nrMuchii; i++)
out << rez[i].nodd1 << " " << rez[i].nodd2 << "\n";
return 0;
}