Pagini recente » Cod sursa (job #2720716) | Cod sursa (job #2987616) | Cod sursa (job #1112198) | Cod sursa (job #477719) | Cod sursa (job #2166296)
#include <fstream>
#include <algorithm>
#include <vector>
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];
vector < pair < int, int > > sol;
int tat(int a)
{
while(tata[a] != a)
return tat(tata[a]);
return a;
}
void kruskal()
{
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)
{
// fout<< mu[i].d<<" "<<mu[i].x<<" "<<mu[i].y<<'\n';
sum += mu[i].d;
nr++;
tata[a] = b;
sol.push_back({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);
// for(i=1;i<=m;i++)
// fout<<mu[i].d<<" " <<mu[i].x<<" "<<mu[i].y<<'\n';
kruskal();
fout << sum << '\n' << n-1 << '\n';
for(i = 0; i < sol.size(); i++)
{
fout << sol[i].first << " " << sol[i].second << '\n';
}
return 0;
}