Pagini recente » Cod sursa (job #1434195) | Cod sursa (job #1680537) | Cod sursa (job #1702096) | Cod sursa (job #1327387) | Cod sursa (job #3267109)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin ("apm.in");
ofstream cout ("apm.out");
int n,m,nr[200100],t[200100],a,b,x,y,s,f[400100],i1;
struct edge
{
int x,y,s;
}v[400100];
bool ord (edge a,edge b)
{
return a.s<b.s;
}
int tt (int z)
{
int p;
if (t[z]==z) return z;
else
{
p=tt(t[z]);
t[z]=p;
return p;
}
}
void unite ()
{
if (nr[a]>nr[b])
{
nr[a]=nr[a]+nr[b];
t[b]=a;
}
else
{
nr[b]=nr[b]+nr[a];
t[a]=b;
}
}
int main()
{
cin>>n>>m;
for (int i=1; i<=m; i++)
cin>>v[i].x>>v[i].y>>v[i].s;
sort (v+1,v+m+1,ord);
for (int i=1; i<=n; i++) t[i]=i;
for (int i=1; i<=m; i++)
{
x=v[i].x;
y=v[i].y;
a=tt(x);
b=tt(y);
if (a!=b)
{
s=s+v[i].s;
f[i]=1;
i1++;
unite();
}
}
cout<<s<<'\n';
cout<<i1<<'\n';
for (int i=1; i<=m; i++)
if (f[i]) cout<<v[i].x<<" "<<v[i].y<<'\n';
return 0;
}