Pagini recente » Cod sursa (job #1184763) | Cod sursa (job #2463129) | Cod sursa (job #944972) | Cod sursa (job #1663712) | Cod sursa (job #1650112)
#include <fstream>
using namespace std;
ifstream is("apm.in");
ofstream os("apm.out");
struct line{
int x, y, w;
};
line e[1000]; // sir de muchii
line apm[100];
int comp[100];
int m, n, costAPM;
void Read();
void Sort();
void Kruskal();
void Write();
int main()
{
Read();
Kruskal();
is.close();
os.close();
return 0;
}
void Read()
{
is >> n >> m;
int a, b, c;
for( int i = 1; i <= m; ++i )
{
is >> a >> b >> c;
e[i].x = a;
e[i].y = b;
e[i].w = c;
}
}
void Sort()
{
line aux;
for( int i = 1; i <= n; ++i )
for( int j = i + 1; j <= n; ++j )
if( e[i].w > e[j].w )
{
aux = e[i];
e[i] = e[j];
e[j] = aux;
}
}
void Kruskal()
{
Sort();
for( int i = 1; i <= n; ++i )
comp[i] = i;
int k = 0;
for( int i = 1; i <= m; ++i )
{
int x = e[i].x, y = e[i].y;
if( comp[x] != comp[y] )
{
apm[++k] = e[i];
costAPM += e[i].w;
for( int j = 1; j <= n; ++j )
if( comp[j] == comp[y] )
comp[j] = comp[x];
if( k == n - 1 ) // am terminat de construit apm-ul
break;
}
}
Write();
}
void Write()
{
os << costAPM << '\n';
for( int i = 1; i < n; ++i )
os << apm[i].x << ' ' << apm[i].y << ' ' << apm[i].w << '\n';
}