Pagini recente » Cod sursa (job #2098502) | Cod sursa (job #2550176) | Cod sursa (job #534816) | Cod sursa (job #126668) | Cod sursa (job #650869)
Cod sursa(job #650869)
# include <fstream>
# include <algorithm>
# define dim 200002
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
struct apm
{
int n1, n2, cost;
};
apm a[ dim ];
int cmp( apm a, apm b )
{
return a.cost < b.cost;
}
int n, m;
int c[ dim ];
int costmin, amin[ dim ], cnt;
void citire()
{
int i;
f >> n >> m;
for ( i = 1 ; i <= m ; i++ )
f >> a[ i ].n1 >> a[ i ].n2 >> a[ i ].cost;
}
void conex()
{
int i;
for ( i = 1 ; i <= n ; i++ )
c[ i ] = i;
}
void leaga( int x, int y )
{
c[ x ] = y;
}
int cauta( int x )
{
int r;
r = x;
while ( c[ r ] != r )
r = c[ r ];
return r;
}
void rezolva()
{
int m1, m2, i;
sort( a + 1, a + m + 1, cmp );
for ( i = 1 ; i <= m && cnt < n ; i++ )
{
m1 = cauta( a[ i ].n1 );
m2 = cauta( a[ i ].n2 );
//g << m1 << " " << m2 << "\n";
if ( m1 != m2 )
{
cnt ++;
costmin = costmin + a[ i ].cost;
amin[ cnt ] = i;
leaga( m1, m2 );
}
}
}
void afisare()
{
int i;
g << costmin << "\n";
g << cnt << "\n";
for ( i = 1 ; i <= cnt ; i++ )
g << a[ amin[ i ] ].n1 << " " << a[ amin[ i ] ].n2 << " " << a[ amin[ i ] ].cost << "\n";
}
int main()
{
citire();
conex();
rezolva();
afisare();
return 0;
}