Pagini recente » Cod sursa (job #1070049) | Cod sursa (job #1649374) | Cod sursa (job #2673543) | Cod sursa (job #2456787) | Cod sursa (job #1597843)
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
#define Nmax 200010
int p[Nmax] ;
int n , m , x , y , c , s ;
struct graf
{
int inc , sf , cost ;
};
graf v[2 * Nmax] ;
vector <graf> sol;
void init ()
{
for ( int i = 1 ; i <= n ; ++i )
{
p[i] = i ;
}
}
int find_node ( int nod )
{
if ( p[nod] == nod ) return nod;
p[nod] = find_node(p[nod]);
return p[nod];
}
void union_node ( int x , int y )
{
p[find_node(x)] = p[find_node(y)] ;
}
bool cmp ( graf a , graf b )
{
return a.cost < b.cost ;
}
int main()
{
freopen("apm.in","r",stdin);
freopen("apm.out","w",stdout);
scanf("%d %d",&n,&m) ;
for ( int i = 1 ; i <= m ; ++i )
{
scanf("%d %d %d",&v[i].inc,&v[i].sf,&v[i].cost) ;
}
init();
sort(&v[1],&v[m+1],cmp);
for ( int i = 1 ; i <= m ; i++ )
{
if ( find_node(v[i].inc) != find_node(v[i].sf) )
{
union_node(v[i].inc,v[i].sf) ;
s += v[i].cost ;
sol.push_back(v[i]);
}
}
printf("%d\n",s) ;
printf("%d\n",sol.size());
for (int i = 0 ; i < sol.size() ; ++i )
{
printf("%d %d\n",sol[i].inc,sol[i].sf) ;
}
}