Pagini recente » Cod sursa (job #2931341) | Cod sursa (job #3190937) | Cod sursa (job #2921020) | Cod sursa (job #2956234) | Cod sursa (job #3136814)
//algoritmul Kruskal
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
const int N=2e5;
const int M=4e5;
struct muchie{
int x,y,c;
}e[M];
int n,m, t[N+1], nr[N+1];
bool selectat[N+1];
int radacina(int x)
{
if(t[x]==0)
return x;
t[x]=radacina(t[x]);
return t[x];
}
void reuniune(int x,int y)
{
int rx = radacina(x);
int ry= radacina(y);
if(nr[rx]<nr[ry])
{
t[rx]=ry;
nr[ry]+=nr[rx];
}
else
{
t[ry]=rx;
nr[rx]+=nr[ry];
}
}
bool interogare(int x, int y)
{
return (radacina(x) == radacina(y));
}
bool cmp(muchie e1, muchie e2)
{
return (e1.c<e2.c);
}
int main()
{
fin>>n>>m;
for(int i=1;i<=n;i++)
{
nr[i]=1;
}
for(int i=0;i<m;i++)
{
fin>>e[i].x>>e[i].y>>e[i].c;
}
sort(e, e+m, cmp);
int n_e=0,i=0,c_tot=0;
while(n_e<n-1)
{
if(!interogare(e[i].x, e[i].y))
{
n_e++;
reuniune(e[i].x,e[i].y);
c_tot += e[i].c;
selectat[i]=1;
}
i++;
}
fout<<c_tot<<'\n'<<n-1<<'\n';
for(int i=0;i<m;i++)
{
if(selectat[i])
{
fout<<e[i].x<<' '<<e[i].y<<'\n';
}
}
return 0;
}