Disjoint-set
2019. 5. 14. 22:55ㆍ알고리즘/암기
Union-find라고도 불리는 서로소 집합 알고리즘으로 두 노드가 같은 집합에 있는지 여부를 판별할 수 있다
Disjoint-set 문제는 두 노드의 연결 상태를 주고 마지막에 여부를 묻는다
부모를 집합의 가장 작은 번호로 기입한 후 재귀적으로 두 노드를 탐색해서 부모를 알아내고 비교할 수 있다
int getparent(int idx) {
if(parent[idx] == idx) return idx;
else parent[idx] = getparent(parent[idx]);
}
void uniongroup(int a, int b) {
int ap = parent(a);
int bp = parent(b);
if(ap < bp) parent[bp] = ap;
else parent[ap] = bp;
}
'알고리즘 > 암기' 카테고리의 다른 글
함수 내 큰 배열 선언 오류 (0) | 2019.05.15 |
---|---|
파라메트릭 서치 (0) | 2019.05.14 |
구조체를 활용한 priority_queue 비교함수 (0) | 2019.05.14 |
구조체 초기화 (0) | 2019.05.11 |
입력 갯수를 확인하는 2가지 방법 (0) | 2019.05.08 |