Pagini recente » Cod sursa (job #508327) | Cod sursa (job #2759085) | Cod sursa (job #1801387) | Cod sursa (job #67093) | Cod sursa (job #2966020)
#include <fstream>
#include <algorithm>
///#include <vector>
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
const int MMAX = 400100;
const int NMAX = 200100;
struct muchie
{
int x, y;
int cost;
};
///vector <muchie> L;
muchie L[MMAX];
int n, m;
int T[NMAX];
bool viz[NMAX];
int s;
bool cmp(const muchie &a, const muchie &b)
{
return a.cost < b.cost;
}
int Find(int i)
{
if(T[i] == i)
return i;
return T[i] = Find(T[i]);
}
inline void Union(int cx, int cy)
{
T[cy] = cx;
}
int k1, k2;
int sol1[NMAX], sol2[NMAX];
int main()
{
f >> n >> m;
int x, y, c;
for(int i = 1 ; i <= m ; i++)
{
f >> L[i].x >> L[i].y >> L[i].cost;
}
sort(L + 1, L + m + 1, cmp);
for(int i = 1 ; i <= n ; i++)
T[i] = i;
for(int i = 1 ; i <= m ; i++)
{
int rx = Find(L[i].x);
int ry = Find(L[i].y);
if(rx != ry)
{
Union(rx, ry);
s += L[i].cost;
sol1[++k1] = L[i].x;
sol2[++k2] = L[i].y;
}
}
g << s << '\n';
g << n - 1 << '\n';
for (int i = 1 ; i <= n - 1 ; i++)
g << sol2[i] << ' ' << sol1[i] << '\n';
return 0;
}