Pagini recente » Cod sursa (job #2376418) | Cod sursa (job #2685276) | Cod sursa (job #2955075) | Cod sursa (job #1997713) | Cod sursa (job #1469113)
#include <fstream>
#include <algorithm>
#define NMAX 200003
#define MMAX 400003
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
int ind[NMAX],gr[NMAX],nrM,cost,r1,r2,n,m;
struct me{int nod1,nod2,cost; bool used;} muchie[MMAX];
bool test(int m1,int m2)
{
return muchie[m1].cost<muchie[m2].cost;
}
int grupa(int nod)
{
if(gr[nod]!=nod)
return (gr[nod] = grupa(gr[nod]));
}
int main()
{
fin>>n>>m;
for(int i=1;i<=m;i++)
{
fin>>muchie[i].nod1>>muchie[i].nod2>>muchie[i].cost;
ind[i] = i;
}
for(int i=1;i<=n;i++)
gr[i]=i;
sort(ind+1,ind+m+1,test);
for(int i=1;i<=m;i++)
{
r1 = grupa(muchie[ind[i]].nod1);
r2 = grupa(muchie[ind[i]].nod2);
if(r1 != r2)
{
gr[r2] = r1;
cost+=muchie[ind[i]].cost; nrM++; muchie[ind[i]].used = 1;
}
}
fout<<cost<<'\n'<<nrM<<'\n';
for(int i=1;i<=m;i++)
if(muchie[i].used == 1)
fout<<muchie[i].nod1<<' '<<muchie[i].nod2<<'\n';
return 0;
}