Pagini recente » Cod sursa (job #714294) | Cod sursa (job #1736876) | Cod sursa (job #1683132) | Cod sursa (job #1772600) | Cod sursa (job #2164706)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
int i, n, m, tata[200010], sum;
struct muchie
{
int d, x, y;
}mu[400010];
int tat(int a)
{
while(tata[a] != a)
return tat(tata[a]);
return a;
}
void kruskal()
{
int st = 0;
int nr = 0;
for(int i = 1; i <= m; i++)
{
int a, b;
a = tat(mu[i].x);
b = tat(mu[i].y);
if(a != b)
{
sum += mu[i].d;
nr++;
tata[mu[i].x] = mu[i].y;
}
}
if(nr == n-1)
return;
}
int cmp(muchie a, muchie b)
{
return a.d < b.d;
}
int main()
{
fin >> n >> m;
for(i = 1; i <= m; i++)
{
fin >> mu[i].x >> mu[i].y >> mu[i].d;
}
for(i = 1; i <= n; i++)
tata[i] = i;
sort(mu + 1, mu + m + 1, cmp);
kruskal();
fout << sum << '\n' << n-1 << '\n';
for(i = 1; i <= n; i++)
{
if(i != tata[i])
fout << i<< " " << tata[i] << '\n';
}
return 0;
}