Pagini recente » Cod sursa (job #86336) | Cod sursa (job #2525826) | Cod sursa (job #2871779) | Cod sursa (job #2465490) | Cod sursa (job #3210827)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
string file = "apm";
ifstream cin (file + ".in");
ofstream cout (file + ".out");
const int N = 200000;
int r[N+1];
struct muchie{
int nod,cost;
};
struct linie{
int x,y,cost;
}muchii[N*2];
struct arborica{
int x,y;
}arbore[N-1];
vector <muchie> L[N+1];
int radacina (int x)
{
if (r[x] == 0)
return x;
return (r[x] = radacina(r[x]));
}
inline bool cmp (const linie &x, const linie &y)
{
return x.cost < y.cost;
}
int main()
{
int n,m,x,y,z, c(0), s(0);
cin >> n >> m;
for (int i=0; i<m; i++)
{
cin >> x >> y >> z;
L[x].push_back({y,z});
L[y].push_back({x,z});
muchii[i] = {x,y,z};
}
sort(muchii,muchii+m,cmp);
for (int i=0; i<m; i++)
{
int radx = radacina (muchii[i].x), rady = radacina(muchii[i].y);
if (radx != rady)
{
r[rady] = radx;
arbore[c++] = {muchii[i].x,muchii[i].y};
s+= muchii[i].cost;
}
}
cout << s << '\n' << c;
for (int i=0;i<c; i++)
{
cout << '\n' << arbore[i].x << ' ' << arbore[i].y;
}
}