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