Pagini recente » Cod sursa (job #2090866) | Cod sursa (job #1058322) | Cod sursa (job #1448090) | Cod sursa (job #2331947) | Cod sursa (job #2207440)
/// kruskal
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 200005;
vector<pair<int, pair<int, int>>> muchii;
vector<pair<int,int>> apm;
int n, m, i, sum;
int t[N];
int rad(int x)
{
if(t[x] == 0)
return x;
t[x] = rad(t[x]);
return t[x];
}
void uneste(int x, int y)
{
t[rad(x)] = rad(y);
}
int main()
{
ifstream fin("apm.in");
ofstream fout("apm.out");
///citire
fin>>n>>m;
muchii.resize(m);
for(i=0;i<m;i++)
{
int x,y,l;
fin>>x>>y>>l;
muchii[i] = {l, {x, y}};
}
///kruskal
sort(muchii.begin(), muchii.end());
for(auto m : muchii)
{
int x, y, l;
x = m.second.first;
y = m.second.second;
l = m.first;
if(rad(x) != rad(y))
{
uneste(x,y);
apm.push_back({x,y});
sum += l;
}
}
///afisare
fout<<sum<<'\n'<<n-1<<'\n';
for(auto m : apm)
fout<<m.first<<' '<<m.second<<'\n';
return 0;
}