Pagini recente » Cod sursa (job #2643682) | Cod sursa (job #3221400) | Cod sursa (job #2790154) | Cod sursa (job #728524) | Cod sursa (job #2164653)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
int i, n, m, tata[200010], sum, start, j;
struct muchie
{
int d, x, y;
}mu[400010];
int tat(int a)
{
while(tata[a] != a)
return tat(tata[a]);
return a;
}
int 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[a] = mu[i].y;
st = mu[i].x;
}
}
if(nr == n-1)
return st;
}
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);
start = kruskal();
j = start;
fout << sum << '\n' << n-1 << '\n';
for(i = 1; i <= n-1; i++)
{
fout << j<< " " << tata[j] << '\n';
j = tata[j];
}
return 0;
}