unionfind 2

[알고리즘] Union-find(합집합 찾기)

Union-find란? 합집합을 찾는 알고리즘이다. 구체적으로 여러 개의 노드가 존재할 때 두 개의 노드를 선택해 두 노드를 같은 집합으로 합치거나, 현재 이 두 노드가 서로 같은 그래프에 속하는지 판별해주는 알고리즘 크루스칼 알고리즘에도 쓰이는 중요한 그래프 알고리즘 알고리즘 사례 위와 같이 모두 떨어져있는 집합 각각 6개씩 있다고 가정하자. 각각의 부모노드는 자기자신이다. 여기서 2와 3를 연결했다고 해보자. (이 때 i값이 작은쪽이 부모노드가 된다고 가정한다 보통 작은 쪽이 부모노드가 되는 게 일반적) 이제 1과 2를 연결해보자. 위의 표를 보면 알 수 있듯이 합집합으로 되어있는 노드들의 부모노드 값들이 전부 조상노드로 향하는 게 아니라는 걸 알 수 있다. 그렇기 때문에 합집합으로 다 연결을 했다고..

알고리즘 2022.08.29

[Union-find] BOJ 1717 집합의 표현

https://www.acmicpc.net/problem/1717 1717번: 집합의 표현 첫째 줄에 n(1 ≤ n ≤ 1,000,000), m(1 ≤ m ≤ 100,000)이 주어진다. m은 입력으로 주어지는 연산의 개수이다. 다음 m개의 줄에는 각각의 연산이 주어진다. 합집합은 0 a b의 형태로 입력이 주어진다. 이는 www.acmicpc.net 문제 해결 알고리즘 Union find 문제 parent 배열이 무조건 그 노드의 조상노드를 가리키는 게 아니기 때문에 조상 노드 비교 해줄 때는 find_parent 함수를 써줘야한다. 소스 코드 #include using namespace std; int n, m; int parent[1000001]; int find_parent(int x){ if(x..