Pagini recente » Cod sursa (job #1480229) | Cod sursa (job #2208885) | Cod sursa (job #313875) | Cod sursa (job #2784652) | Cod sursa (job #526522)
Cod sursa(job #526522)
#include <algorithm>
#include <vector>
#include <cctype>
using namespace std;
#define DIM 400005
#define sc second
#define fs first
pair <int,pair <int,int> > v[DIM];
int p[DIM],r[DIM],sol[DIM];
int n,m,nrm,nrt;
void read ()
{
int i;
scanf ("%d%d",&n,&m);
for (i=1; i<=m; ++i)
scanf ("%d%d%d",&v[i].sc.fs,&v[i].sc.sc,&v[i].fs);
}
void unite (int x,int y)
{
if (r[x]<r[y])
p[x]=y;
else
p[y]=x;
if (r[x]==r[y])
++r[x];
}
int find (int x)
{
if (x!=p[x])
p[x]=find (p[x]);
return p[x];
}
void solve ()
{
int i;
sort (v+1,v+m+1);
for (i=1; i<=n; ++i)
p[i]=i;
for (i=1; i<=m && nrm<n; ++i)
if (find (v[i].sc.fs)!=find (v[i].sc.sc))
{
sol[++nrm]=i; nrt+=v[i].fs;
unite (find (v[i].sc.fs),find (v[i].sc.sc));
}
}
void print ()
{
int i;
printf ("%d\n%d\n",nrt,nrm);
for (i=1; i<=nrm; ++i)
printf ("%d %d\n",v[sol[i]].sc.fs,v[sol[i]].sc.sc);
}
int main ()
{
freopen ("apm.in","r",stdin);
freopen ("apm.out","w",stdout);
read ();
solve ();
print ();
return 0;
}