Pagini recente » Cod sursa (job #3126500) | Cod sursa (job #2090806) | Cod sursa (job #1005839) | Cod sursa (job #2181127) | Cod sursa (job #1608061)
#include <cstdio>
#include <algorithm>
using namespace std;
struct edg
{
int u,v,val;
}a[400002];
int n,m, t[200002];
bool viz2[400002];
bool cmp(edg c, edg b)
{
return c.val < b.val;
}
inline int FindSet (int x)
{
while (x!=t[x])
x=t[x];
return x;
}
inline void UnionSet (int x, int y)
{
t[FindSet(x)]=FindSet(y);
}
int main()
{
freopen("apm.in", "r", stdin);
freopen("apm.out", "w", stdout);
int sum=0;
scanf("%d%d", &n, &m);
for(int i=1; i<=m; i++)
scanf("%d%d%d", &a[i].u, &a[i].v, &a[i].val);
for(int i=1; i<=n; i++)
t[i]=i;
sort(a+1, a+m+1, cmp);
for(int i=1; i<=m; i++)
if(FindSet(a[i].u)!=FindSet(a[i].v))
{
viz2[i]=1;
UnionSet(a[i].u,a[i].v);
sum+=a[i].val;
}
printf("%d\n", sum);
for(int i=1; i<=m; i++)
if(viz2[i])
printf("%d %d\n", a[i].u, a[i].v);
return 0;
}