Pagini recente » Cod sursa (job #1636066) | Cod sursa (job #252453) | Cod sursa (job #1281333) | Cod sursa (job #1575503) | Cod sursa (job #1777413)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define NMAX 200001
#define MMAX 400001
using namespace std;
int X, Y, C, N, M, l;
int costMinim;
int tata[MMAX];
int sol[MMAX];
struct pereche
{
int v1;
int v2;
int cost;
pereche(int a=0, int b=0, int c=0)
{
v1 = a;
v2 = b;
cost = c;
}
}vec[MMAX];
int radacina(int x)
{
while (tata[x] != x)
x = tata[x];
return x;
}
bool comparator(pereche a, pereche b)
{
return a.cost < b.cost;
}
void unire(int x, int y)
{
tata[radacina(y)] = radacina(x);
}
void solve()
{
for (int i=1; i<=M; i++)
{
if (radacina(vec[i].v1) != radacina(vec[i].v2))
{
costMinim+=vec[i].cost;
unire(vec[i].v1, vec[i].v2);
sol[l++] = i;
}
}
}
void read()
{
scanf("%d %d\n", &N, &M);
for (int i=1; i<=M; i++)
{
scanf("%d %d %d\n", &vec[i].v1, &vec[i].v2, &vec[i].cost);
}
for (int i=1; i<=N; i++)
tata[i] = i;
}
int main()
{
freopen("apm.in", "r", stdin);
freopen("apm.out", "w", stdout);
read();
sort(vec+1, vec+M+1, comparator);
solve();
printf("%d\n%d\n", costMinim, l);
for (int i=1; i<=l; i++)
printf("%d %d\n", vec[i].v1, vec[i].v2);
return 0;
}