Pagini recente » Rating FrunteanuMatei (alganar) | Cod sursa (job #61841) | Cod sursa (job #2813566) | Cod sursa (job #2784067) | Cod sursa (job #1207709)
#include <cstdio>
#include <algorithm>
using namespace std;
#define MAXM 400005
#define MAXN 200005
struct edge
{
int a, b, w;
}e[MAXM];
struct asd
{
int a, b;
}sol[MAXN];
bool comp(edge a, edge b)
{
return a.w < b.w;
}
int tata[MAXN], rang, rang1, rang2;
int ftata(int nod);
void uneste(int noda, int nodb);
int main()
{
freopen("apm.in","r",stdin);
freopen("apm.out","w",stdout);
int n, m, i, suma=0, u=0, muchii=0, tata1, tata2;
scanf("%d%d",&n,&m);
for(i=1; i<=n; i++) tata[i]=i;
for(i=1; i<=m; i++)
scanf("%d%d%d",&e[i].a,&e[i].b,&e[i].w);
sort(e+1,e+m+1,comp);
for(i=1; i<=m; i++)
{
tata1 = ftata(e[i].a); rang1 = rang; rang=0;
tata2 = ftata(e[i].b); rang2 = rang; rang=0;
if(ftata(e[i].a) != ftata(e[i].b))
{
uneste(e[i].a,e[i].b);
sol[++u].a=e[i].a; sol[u].b=e[i].b;
suma += e[i].w;
muchii++;
}
}
printf("%d\n%d\n",suma,muchii);
for(i=1; i<=u; i++)
printf("%d %d\n",sol[i].b, sol[i].a);
return 0;
}
int ftata(int nod)
{
if(tata[nod] == nod)
return nod;
int t=ftata(tata[nod]);
tata[nod]=t;
rang++;
return t;
}
void uneste(int noda, int nodb)
{
if(rang1 > rang2) tata[ftata(nodb)]=ftata(noda);
else tata[ftata(noda)]=ftata(nodb);
}