Cod sursa(job #2819477)

Utilizator Stefan_GhinescuGhinescu Stefan-George Stefan_Ghinescu Data 18 decembrie 2021 13:58:24
Problema Asmax Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <fstream>
#include <algorithm>

using namespace std;

ifstream fin("asmax.in");
ofstream fout("asmax.out");

const int NMAX = 100000;

struct MUCHIE
{
	int x, y, c, sel;
};

MUCHIE v[NMAX + 5];
int t[NMAX + 5], h[NMAX + 5];

int FindSet(int x)
{
	while (x != t[x])
	{
		x = t[x];
	}
	return x;
}

void UnionSet(int x, int y)
{
	if (h[x] > h[y])
	{
		t[y] = x;
	}
	else
	{
		if (h[y] > h[x])
		{
			t[x] = y;
		}
		else
		{
			t[y] = x;
			++h[x];
		}
	}
}

bool cmp(const MUCHIE& a, const MUCHIE& b)
{
	return a.c < b.c;
}

int main()
{
	int n, m, i, nr = 0, rx, ry, cost = 0;
	fin >> n >> m;
	for (i = 1; i <= m; ++i)
	{
		fin >> v[i].x >> v[i].y >> v[i].c;
	}
	for (i = 1; i <= n; ++i)
	{
		t[i] = i;
		h[i] = 1;
	}
	sort(v + 1, v + m + 1, cmp);
	nr = 0;
	for (i = 1; nr < n - 1 /* && i <= m*/ ; ++i)
	{
		rx = FindSet(v[i].x);
		ry = FindSet(v[i].y);
		if (rx != ry)
		{
			UnionSet(rx, ry);
			cost += v[i].c;
			v[i].sel = 1;
			++nr;
		}
	}
	fout << cost << '\n';
	return 0;
}