Pagini recente » Cod sursa (job #1356922) | Cod sursa (job #3306895) | Cod sursa (job #3301621) | Cod sursa (job #1916690) | Cod sursa (job #3203993)
#include <iostream>
#include <fstream>
#include <algorithm>
#define nr 400002
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
struct muchie
{
int x, y, c;
}v[nr],sol[nr];
int n,m,i,viz[nr/2],cost,rang[nr/2],t[nr/2];
bool ordonare(muchie a, muchie b)
{
return a.c<b.c;
}
void citire()
{
f>>n>>m;
for (i=1;i<=m;i++)
f>>v[i].x>>v[i].y>>v[i].c;
}
int radacina(int k)
{
while (t[k]!=k)
k=t[k];
return k;
}
void kruskal()
{
int i=1,k=1,nr1,nr2,j,tatax,tatay;
int cnt=0;
for (i=1;i<=n;i++) t[i]=i, rang[i]=1;
i=1;
for (i=1;i<=m;i++)
{
tatax=radacina(v[i].x);
tatay=radacina(v[i].y);
if (tatax!=tatay)
{
cost+=v[i].c;
sol[++cnt].x=v[i].x; sol[cnt].y=v[i].y;
if (rang[tatax]>rang[tatay])
t[tatay]=tatax;
else
{
t[tatax]=tatay;
if (rang[tatax]==rang[tatay])
rang[tatay]++;
}
}
}
}
void afis()
{
int i;
g<<cost<<'\n'<<n-1<<'\n';
for (i=1;i<=n-1;i++)
g<<sol[i].x<<" "<<sol[i].y<<'\n';
}
int main()
{
citire();
sort(v+1,v+m+1,ordonare);
///prim();
kruskal();
afis();
return 0;
}