Pagini recente » Cod sursa (job #518831) | Cod sursa (job #461431) | Cod sursa (job #3277046) | Cod sursa (job #2979976) | Cod sursa (job #3162684)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
const int nmax=200005;
int cnt,sum;
int v[nmax][2];
int n,m;
int x,y,c;
int t[nmax];
struct Edge
{
int x,y,c;
bool operator < (const Edge &A) const
{
return c < A.c;
}
};
Edge E[2*nmax];
void read()
{
fin>>n>>m;
for(int i=1;i<=m;i++)
{
fin>>E[i].x>>E[i].y>>E[i].c;
}
sort(E+1,E+m+1);
}
void Union(int x,int y)
{
t[x]=y;
}
int Find(int x)
{
int rad=x;
while(t[rad]!=(-1))
{
rad=t[rad];
}
int aux;
while(x!=rad)
{
aux=t[x];
t[x]=rad;
x=aux;
}
return rad;
}
void solve()
{
for(int i=1;i<=n;i++) t[i]=-1;
for(int i=1;i<=m;i++)
{
int r1=Find(E[i].x);
int r2=Find(E[i].y);
if(r1!=r2)
{
Union(r1,r2);
sum+=E[i].c;
v[++cnt][0]=E[i].x;
v[cnt][1]=E[i].y;
}
}
fout<<sum<<"\n";
fout<<cnt<<"\n";
for(int i=1;i<=cnt;i++)
{
fout<<v[i][0]<<" "<<v[i][1]<<"\n";
}
}
int main()
{
read();
solve();
return 0;
}