Pagini recente » Cod sursa (job #1040813) | Cod sursa (job #2632861) | Cod sursa (job #2658439) | Cod sursa (job #1583794) | Cod sursa (job #3203022)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
int n, m, sum, nrmuchii;
struct muchiis{
int i, j, cost;
}muchii[400001];
vector<int> G[200001];
void citire()
{
fin>>n>>m;
for(int i=0; i<m; i++)
{
int x, y, c;
fin>>x>>y>>c;
muchii[i].i=x, muchii[i].j=y, muchii[i].cost=c;
}
}
bool cst_srt(muchiis a, muchiis b)
{
if(a.cost<b.cost)
return true;
return false;
}
int root[200001];
int rad(int k)
{
if(root[k]==k)
return k;
int rez=rad(root[k]);
root[k]=rez;
return rez;
}
void unire(int ra, int rb)
{
for(int i=1; i<=n; i++)
if(root[i]==rb)
root[i]=ra;
}
void kruskal()
{
sort(muchii, muchii+m, cst_srt);
for(int i=1; i<=n; i++)
root[i]=i;
for(int i=0; i<m; i++)
{
int rx=rad(muchii[i].i), ry=rad(muchii[i].j);
if(rx==ry)
continue;
unire(rx, ry);
G[muchii[i].i].push_back(muchii[i].j);
sum+=muchii[i].cost;
nrmuchii++;
}
}
int main()
{
citire();
kruskal();
fout<<sum<<'\n'<<nrmuchii<<'\n';
for(int i=1; i<=n; i++)
for(auto j: G[i])
fout<<i<<" "<<j<<'\n';
return 0;
}