Pagini recente » Cod sursa (job #1395756) | Cod sursa (job #2580308) | Cod sursa (job #2807486) | Cod sursa (job #1351181) | Cod sursa (job #2864392)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
int n, m, t[200005], viz[400005];
struct Muchie
{
int x, y, cost;
bool operator < (const Muchie &A) const
{
return A.cost > cost;
}
};
Muchie M[400005];
void Citire()
{
int x, y, cost, i;
fin >> n >> m;
for(i = 1;i <= m;i++)
fin >> M[i].x >> M[i].y >> M[i].cost;
sort(M + 1, M + m + 1);
}
void Union(int x, int y)
{
t[y] = x;
}
int Find(int x)
{
int rad = x, y;
while(t[rad] != 0)
rad = t[rad];
while(x != rad)
{
y = t[x];
t[x] = rad;
x = y;
}
return rad;
}
void APM()
{
int sol = 0, i, x, y, rasp = 0;
for(i = 1;i <= m;i++)
{
x = Find(M[i].x);
y = Find(M[i].y);
if(x != y)
{
viz[i] = 1;
rasp++;
Union(x, y);
sol += M[i].cost;
}
}
fout << sol << "\n";
fout << rasp << "\n";
for(i = 1;i <= m;i++)
if(viz[i])
fout << M[i].x << " " << M[i].y << "\n";
}
int main()
{
Citire();
APM();
return 0;
}