Pagini recente » Cod sursa (job #1829682) | Cod sursa (job #427545) | Cod sursa (job #792736) | Cod sursa (job #2376384) | Cod sursa (job #568621)
Cod sursa(job #568621)
#include <stdio.h>
#include<algorithm>
#include<vector>
#include<ctype.h>
#include<string.h>
#include<bitset>
#define dim 4*100010
using namespace std ;
struct apm
{
int x, y , c ;
}a[dim];
bitset <dim> f;
int n,m , cnt;
int t[dim] , r[dim];
bitset <dim> viz;
void read()
{
scanf("%d %d\n",&n,&m);
for(int i=1 ; i<=m;i++)
scanf("%d %d %d\n",&a[i].x , &a[i].y , &a[i].c );
}
int cmp (apm a , apm b )
{
return a.c<b.c;
}
void afis8 (apm v[dim])
{
for(int i=1 ; i<=m;i++)
printf("%d %d %d\n" , v[i].x , v[i].y , v[i].c);
}
int find (int &x)
{
while ( t[x]!=x )
x = t[x] ;
return t[x];
}
int unite ( int &x , int &y )
{
if ( r[x] < r[y] )
t[x] = y ;
else
t[y] = x ;
if ( r[x] == r[y] )
r[x]++ ;
}
void afis ()
{
for(int i=1 ; i<=m;i++)
if ( viz[i] == true )
{
printf("%d %d\n",a[i].x , a[i].y);
}
}
void solve()
{
int nod_x,nod_y;
int sum =0 ;
read();
sort (a+1 , a+m+1 , cmp ) ;
// afis8 (a) ;
for(int i=1 ; i<=n;i++)
t[i] = i ;
for(int i=1 ; i<=m;i++)
{
nod_x = find ( a[i].x) ;
nod_y = find ( a[i].y ) ;
if (find ( nod_x ) != find ( nod_y ))
{
unite ( nod_x , nod_y);
cnt++;
sum+= a[i].c ;
viz[ i ] = true;
}
}
printf("%d\n%d\n", sum, cnt);
afis () ;
}
int main ()
{
freopen("apm.in","r",stdin);
freopen("apm.out","w",stdout);
solve();
return 0;
}