Pagini recente » Cod sursa (job #347414) | Cod sursa (job #2855037) | Cod sursa (job #285459) | Cod sursa (job #1849682) | Cod sursa (job #696617)
Cod sursa(job #696617)
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
#define dim 100010
int viz[dim*2],n , m, nrm, cost, t[dim*2], r[dim*2];
ifstream fin("apm.in");
ofstream fout("apm.out");
struct muchie{int x, y, c;}v[dim*4], sol[dim];
inline int cmp(muchie a, muchie b)
{
return a.c<b.c;
}
void read()
{
fin>>n >>m;
for(int i=1;i<=m;++i)
fin>>v[i].x >>v[i].y >>v[i].c;
}
int find(int x)
{
if(x!=t[x])
t[x]=find(t[x]);
return t[x];
}
inline void unite(int x, int y)
{
if(r[x]<r[y])
t[x]=y;
else
t[y]=x;
if(r[x]==r[y])
++r[x];
}
void solve()
{
int i;
for(i=1;nrm<n-1 && i<=m;++i)
if( find(v[i].x)!=find(v[i].y) )
{
cost+=v[i].c;
sol[++nrm]=v[i];
unite(v[i].x,v[i].y);
}
}
void tipar()
{
fout<<cost<<'\n';
fout<<nrm <<'\n';
for(int i=1;i<=nrm;++i)
fout<<sol[i].x <<" "<<sol[i].y <<'\n';
}
int main()
{
read();
for(int i=1;i<=n;++i)
t[i]=i;
sort(v+1,v+m+1,cmp);
solve();
tipar();
return 0;
}