Pagini recente » Rating Bistriceanu Horia (Horia20) | Istoria paginii utilizator/energyipad | Cod sursa (job #807779) | Profil domnica57 | Cod sursa (job #1436064)
#include<fstream>
#include<algorithm>
#include<vector>
using namespace std;
#define NEGINF -32000
ifstream fin("kruskal.in");
ofstream fout("kruskal.out");
struct sEdges{ int x, y, c; };
int n, m;
vector<sEdges> costs;
class CompareEdges
{
public:
bool operator()(const sEdges& x, const sEdges& y) const
{
return x.c < y.c;
}
};
void citire()
{
fin >> n >> m;
int x, y, c;
for (int i = 1; i <= m; i++)
{
fin >> x >> y >> c;
sEdges k;
k.x = x;
k.y = y;
k.c = c;
costs.push_back(k);
}
fin.close();
}
void rezolva()
{
int *vertex;
vertex = new int[n + 1];
for (int i = 1; i <= n; i++) vertex[i] = i;
make_heap(costs.begin(), costs.end(), CompareEdges());
sort_heap(costs.begin(), costs.end(), CompareEdges());
for (int i = 0; i<m; i++)
{
sEdges k = costs[i];
if (vertex[k.x] != vertex[k.y]) {
int vX = vertex[k.x];
int vY = vertex[k.y];
for (int j = 1; j <= n; j++)
if (vertex[j] == vX || vertex[j] == vY)
vertex[j] = vY;
}
else
costs[i].c = NEGINF;
}
}
void afiseaza()
{
for (int i = 0; i<m; i++)
if (costs[i].c != NEGINF)
fout << costs[i].x << " " << costs[i].y << "\n";
fout.close();
}
int main()
{
citire();
rezolva();
afiseaza();
return 0;
}