Pagini recente » Cod sursa (job #1078878) | Cod sursa (job #2246416) | Cod sursa (job #441235) | Cod sursa (job #2692377) | Cod sursa (job #2202111)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("apm.in");
ofstream cout("apm.out");
struct muchie
{
int x,y,c;
}e[400005];
int t[200005], nrn[200005], m, n, c, x, y, selectat[400005];
bool cmp(muchie x, muchie y)
{
return (x.c<y.c);
}
int radacina(int x)
{
if(t[x]==0)
return x;
t[x]=radacina(t[x]);
return t[x];
}
bool gaseste(int x, int y)
{
return (radacina(x)==radacina(y));
}
void uniune(int x, int y)
{
int rx=radacina(x);
int ry=radacina(y);
if(nrn[x]<nrn[y])
{
t[rx]=ry;
nrn[ry]+=nrn[rx];
}
else
{
t[ry]=rx;
nrn[rx]+=nrn[ry];
}
}
void citire()
{
cin>>n>>m;
for(int i=1; i<=n; i++)
nrn[i]=1;
for(int i=1; i<=m; i++)
{
cin>>e[i].x>>e[i].y>>e[i].c;
}
sort(e+1, e+m+1, cmp);
long long total=0;
int muchii=0;
for(int i=1; i<=m; i++)
{
if(!gaseste(e[i].x, e[i].y))
{
selectat[i]=true;
total+=e[i].c;
uniune(e[i].x, e[i].y);
}
}
cout<<total<<'\n';
for(int i=1; i<=m; i++)
if(selectat[i])
muchii++;
cout<<muchii<<'\n';
for(int i=1; i<=m; i++)
if(selectat[i])
cout<<e[i].y<<' '<<e[i].x<<'\n';
}
int main()
{
citire();
return 0;
}