Pagini recente » Solutii Autumn Warmup, Runda 3 | Cod sursa (job #2073592) | Cod sursa (job #2049964) | Cod sursa (job #1858081) | Cod sursa (job #1035632)
#include <cstdio>
#include <vector>
#include <algorithm>
#define Nmax 400001
using namespace std;
int N, M, Cmin, G[Nmax], X[Nmax], Y[Nmax], C[Nmax], Ind[Nmax];
vector <int> Muchii;
bool Comp(int i, int j)
{
return (C[i] < C[j]);
}
int Arbore(int i)
{
if (G[i] == i)
return i;
G[i] = Arbore(G[i]);
return G[i];
}
void Reuniune(int i, int j)
{
G[Arbore(i)] = Arbore(j);
}
void Citire()
{
scanf("%d %d\n", &N, &M);
for (int i = 1; i <= M; ++i)
{
scanf("%d %d %d\n", &X[i], &Y[i], &C[i]);
Ind[i] = i;
}
for (int i = 1; i <= N; ++i)
G[i] = i;
sort(Ind + 1, Ind + M + 1, Comp);
}
void APM()
{
for (int i = 1; i <= M; ++i)
{
if (Arbore(X[Ind[i]]) != Arbore(Y[Ind[i]]))
{
Cmin += C[Ind[i]];
Reuniune(X[Ind[i]], Y[Ind[i]]);
Muchii.push_back(Ind[i]);
}
}
}
void Afisare()
{
printf("%d\n%d\n", Cmin, N - 1);
for (int i = 0; i < N - 1; ++i)
printf("%d %d\n", X[Muchii[i]], Y[Muchii[i]]);
}
int main()
{
freopen("apm.in", "r", stdin);
freopen("apm.out", "w" ,stdout);
Citire();
APM();
Afisare();
return 0;
}