Pagini recente » Cod sursa (job #1224624) | Cod sursa (job #1821192) | Cod sursa (job #2360769) | Cod sursa (job #665331) | Cod sursa (job #2131058)
#include <fstream>
#include <algorithm>
using namespace std;
struct el{
int xl,yl,cost;
bool es;
}v[400002];
int n,m;
int t[200002],ra[200002];
bool cp(el m1,el m2)
{
return m1.cost<m2.cost;
}
int ver(int x)
{
if(t[x]==x)
return x;
t[x]=ver(t[x]);
return t[x];
}
int tot=0,co=0;
ifstream f("apm.in");
ofstream g("apm.out");
void reuneste(int m1,int m2)
{
if(ra[m1]>ra[m2])
{
t[m1]=m2;
}
else
{
t[m2]=m1;
if(ra[m1]==ra[m2])
ra[m1]++;
}
}
void krusckal()
{
for(int i=1;i<=m;i++)
{
if(ver(v[i].xl)==ver(v[i].yl))
{
v[i].es=false;
}
else
{
reuneste(v[i].xl,v[i].yl);
tot=tot+v[i].cost;
co++;
}
}
}
int main()
{
f>>n>>m;
for(int i=1;i<=m;i++)
{
f>>v[i].xl>>v[i].yl>>v[i].cost;
v[i].es=true;
}
sort(v+1,v+m+1,cp);
for(int i=1;i<=n;i++)
{
t[i]=i;
}
/* for(int i=1;i<=m;i++)
{
if(ver(v[i].xl)==ver(v[i].yl))
v[i].es=false;
else
{
reuneste(v[i].xl,v[i].yl);
tot=tot+v[i].cost;
co++;
}
}*/
krusckal();
g<<tot<<"\n";
g<<co<<"\n";
for(int i=1;i<=m;i++)
{
if(v[i].es)
{
g<<v[i].xl<<" "<<v[i].yl<<"\n";
}
}
return 0;
}