Pagini recente » Cod sursa (job #728874) | Cod sursa (job #1813628) | Cod sursa (job #2237409) | Cod sursa (job #2892166) | Cod sursa (job #2844980)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
struct muchie
{
int x,y;
short int cost;
}v[400001];
int t[200001],rang[200001],n,m;
int multime(int nod)
{
if(t[nod]!=nod)
t[nod]=multime(t[nod]);
return t[nod];
}
bool criteriu(muchie a, muchie b)
{
return a.cost<b.cost;
}
struct muchii
{
int x,y;
}nou[400001];
int z;
void unire(int x, int y)
{
if(rang[x]<rang [y])
t[x]=y;
else
if(rang[x]>rang[y])
t[y]=x;
else if(rang[x]==rang[y])
{
t[x]=y;
rang[x]++;
}
}
int main()
{
int i,j;
f>>n>>m;
for(i=1;i<=m;i++)
f>>v[i].x>>v[i].y>>v[i].cost;
sort(v+1,v+m+1,criteriu);
int sum=0,cnt=0;
for(i=1;i<=n;i++)
t[i]=i;
int tatalx,tataly;
for(i=1;i<=m && cnt<n;i++)
{
tatalx=multime(v[i].x);
tataly=multime(v[i].y);
if(tatalx!=tataly)
{
unire(tatalx,tataly);
sum+=v[i].cost;
nou[++z].x=v[i].x;
nou[z].y=v[i].y;
cnt++;
}
}
g<<sum<<'\n'<<n-1<<'\n';
for(i=1;i<n;i++)
g<<nou[i].x<<" "<<nou[i].y<<'\n';
return 0;
}