Pagini recente » Cod sursa (job #804185) | Cod sursa (job #2931917) | Cod sursa (job #2326216) | Cod sursa (job #1954304) | Cod sursa (job #1968807)
#include<cstdio>
#include<algorithm>
#define M_MAX 400000
#define N_MAX 200000
using namespace std;
int p[N_MAX+1], n, m, cost,nr;
struct muchie
{
int x, y, cost;
};
muchie v[M_MAX];
struct Vector
{
int x, y;
};
Vector s[M_MAX];
void Read()
{
FILE *fin = fopen("apm.in","r");
fscanf(fin,"%d%d",&n,&m);
for(int i=0; i<m; i++)
fscanf(fin,"%d%d%d",&v[i].x,&v[i].y,&v[i].cost);
fclose(fin);
}
inline bool cmp(muchie a, muchie b)
{
if(a.cost < b.cost) return true;
return false;
}
void Init(int x)
{
for(int i=1; i<=x; i++)
p[i] = i;
}
int Find(int x)
{
int r, aux;
r = x;
while(p[r] != r)
r = p[r];
while(p[x] != r)
{
aux = p[x];
p[x] = r;
x = aux;
}
return r;
}
void Write()
{
FILE *fout = fopen("apm.out","w");
fprintf(fout,"%d\n%d\n",cost,nr);
for(int i=0; i<nr; i++)
fprintf(fout,"%d %d\n",s[i].x,s[i].y);
fclose(fout);
}
int main()
{
int i, rx, ry;
Read();
Init(n);
sort(v,v+m,cmp);
for(i=0; i<m; i++)
{
rx = Find(v[i].x);
ry = Find(v[i].y);
if(rx != ry)
{
p[rx] = ry;
cost += v[i].cost;
s[nr].x = v[i].x;
s[nr++].y = v[i].y;
}
}
Write();
return 0;
}