Pagini recente » Cod sursa (job #1983580) | Cod sursa (job #1068153) | Cod sursa (job #490855) | Cod sursa (job #1675538) | Cod sursa (job #2027021)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
int i, x, y, rx, ry, cost, t[400002], n, m, c, k;
int rad(int x)
{
while(t[x] > 0)
x = t[x];
return x;
}
struct graf
{
int x, y, c;
}arb[400002], sol[400002];
bool cmp (graf a, graf b)
{
return a.c < b.c;
}
int main()
{
f>>n>>m;
for(int i = 1; i <= m; ++ i)
{
f>>x>>y>>c;
arb[i].x = x;
arb[i].y = y;
arb[i].c = c;
}
sort(arb + 1, arb + m + 1, cmp);
for(int i = 1; i <= n; ++ i)
t[i] = -1;
for(int i = 1; i <= m; ++ i)
{
x = arb[i].x;
y = arb[i].y;
rx = rad(x);
ry = rad(y);
if(rx == ry)
continue;
if(t[rx] < t[ry])
{
t[rx] += t[ry];
t[ry] = rx;
}
else
{
t[ry] += t[rx];
t[rx] = ry;
}
sol[++k].x = x;
sol[k].y = y;
cost += arb[i].c;
}
g<<cost<<'\n'<<k<<'\n';
for(i = 1;i <= k; ++ i)
g<<sol[i].x<<" "<<sol[i].y<<'\n';
return 0;
}