알고리즘/알고리즘 이론, 템플릿

MST - Kruskal

b1ackhand 2023. 4. 3. 12:20
struct node {
	int start;
	int end;
	int cost;
};

int N, M;
vector<node> graph;
int par[100002];
int a, b, c;


bool cmp(node a, node b)
{
	return a.cost < b.cost;
}

int find(int x)
{
	if (par[x] == x)
		return x;
	else
		return par[x] = find(par[x]);
}

void merge(int x, int y)
{
	x = find(x);
	y = find(y);
	par[y] = x;
}

int main()
{
	cin.tie(0);
	ios_base::sync_with_stdio(false);
	cout.tie(0);

	cin >> N >> M;

	for (int i = 1; i <= N; i++)
		par[i] = i;

	for(int i = 0;i < M;i++)
	{
		cin >> a >> b >> c;
		node A = { a, b,c };
		graph.push_back(A);
	}

	sort(graph.begin(), graph.end(), cmp);

	int ans = 0;
	for (int i = 0; i < graph.size(); i++)
	{
		int aa = find(graph[i].start);
		int bb = find(graph[i].end);
		if (aa == bb)
			continue;
		else
		{
			int cc = graph[i].cost;
			ans += cc;
			merge(graph[i].start, graph[i].end);
		}
	}

'알고리즘 > 알고리즘 이론, 템플릿' 카테고리의 다른 글

스프라그 그런디  (0) 2023.06.05
이분매칭  (0) 2023.06.02
O(nlogn) LIS  (0) 2023.03.28
c++ 문자열 slicing 및 파싱  (0) 2023.03.14
shift 연산과 오버플로우  (0) 2023.03.06