1일1알

백준 24391번 귀찮은 해강이 C++ 본문

알고리즘

백준 24391번 귀찮은 해강이 C++

영춘권의달인 2022. 9. 8. 20:06

출처 : https://www.acmicpc.net/problem/24391

유니온 파인드

 

#include <iostream>
#include <vector>

using namespace std;

vector<int> parent;
vector<int> height;

int GetParent(int n) {
	if (n == parent[n]) return n;
	return parent[n] = GetParent(parent[n]);
}

void Merge(int u, int v) {
	u = GetParent(u);
	v = GetParent(v);

	if (u == v) return;

	if (height[u] > height[v])
		::swap(u, v);

	parent[u] = v;

	if (height[u] == height[v])
		height[v]++;
}

int n, m;

int main()
{
	cin >> n >> m;
	parent = vector<int>(n + 1);
	height = vector<int>(n + 1, 1);
	for (int i = 1; i <= n; i++)
		parent[i] = i;

	for (int i = 0; i < m; i++) {
		int a, b;
		cin >> a >> b;
		Merge(a, b);
	}

	int curr;
	cin >> curr;
	int ans = 0;
	for (int i = 1; i < n; i++) {
		int next;
		cin >> next;
		if (GetParent(curr) != GetParent(next))
			ans++;
		curr = next;
	}
	cout << ans;
}

'알고리즘' 카테고리의 다른 글

백준 5972번 택배 배송 C++  (0) 2022.09.10
백준 1253번 좋다 C++  (0) 2022.09.09
백준 2607번 비슷한 단어 C++  (0) 2022.09.07
백준 20291번 파일 정리 C++  (0) 2022.09.06
백준 2146번 다리 만들기 C++  (0) 2022.09.05