Pagini recente » Cod sursa (job #459437) | Cod sursa (job #1448479) | Cod sursa (job #2579289) | Cod sursa (job #936782) | Cod sursa (job #1929177)
#include<cstdio>
#include<algorithm>
#define N_MAX 200002
#define M_MAX 400002
using namespace std;
int p[N_MAX], n, m, cost;
struct muchie
{
int x, y, c;
};
muchie v[M_MAX];
struct Vector
{
int x, y;
};
Vector a[M_MAX];
inline bool cmp(muchie a, muchie b)
{
if(a.c < b.c) return true;
return false;
}
inline int Find(int x)
{
int r = x, aux;
while(p[r] != r)
r = p[r];
while(p[x] != r)
{
aux = p[x];
p[x] = r;
x = aux;
}
return r;
}
int main()
{
int i, RootX, RootY, nrm;
FILE *fin, *fout;
fin = fopen("apm.in","r");
fout = fopen("apm.out","w");
fscanf(fin,"%d%d",&n,&m);
for(i=0; i<m; i++)
fscanf(fin,"%d%d%d",&v[i].x, &v[i].y, &v[i].c);
/*for(i=1; i<=m; i++)
fprintf(fout,"%d %d %d\n",v[i].x, v[i].y, v[i].c);*/
for(i=0; i<=n; i++)
p[i] = i;
sort(v,v+m,cmp);
nrm = 0;
for(i=0; i<m; i++)
{
RootX = Find(v[i].x);
RootY = Find(v[i].y);
if(RootX != RootY)
{
cost += v[i].c;
p[RootX] = RootY;
a[nrm].x = v[i].x;
a[nrm++].y = v[i].y;
}
}
fprintf(fout,"%d\n%d\n",cost,nrm);
for(i=0; i<nrm; i++)
fprintf(fout,"%d %d\n",a[i].x,a[i].y);
fclose(fin);
fclose(fout);
return 0;
}