[백준] 16901. XOR MST

newbieski·2021년 7월 12일
0

백준

목록 보기
4/210

https://www.acmicpc.net/problem/16901

  • 크루스칼, 프림 방식은 시간초과
  • xor 특성 : 서로 비트가 다르면 1, 같으면 0
  • 최상위 비트가 같은 것끼리 알아서 트리를 구성한다고 치고
  • 두 그룹을 연결하는데 가장 적은 비용을 찾는다. : merge() 함수
    • 최상위 비트가 0 : A그룹, 1 : B 그룹
    • 최상위 비트는 일단 다를테니 그 다음 비트부터 살펴봄
    • A 그룹중에서 두번째 비트가 0인 그룹 A0, 1인 그룹 A1
    • B 그룹중에서 두번째 비트가 0인 그룹 B0, 1인 그룹 B1
    • (A0, B0) 에 대해서 비용을 찾고, (A1, B1)에 대해서 비용을 찾는다.
    • 이때 두 쪽 모두가 A,B로 섞이지 않았으면(A0, B1만 있거나, A1, B0만 있으면) 이번 비트로는 합쳐질 수 없음, 다음 비트부터 연산
    • 한쪽이라도 섞여있으면 계속 계산해보는데, 안섞인 쪽은 적당히 최대값을 리턴하게 함
    • 재귀 작업을 할때 vector를 파라미터로 넘겨주면 시간이 오래 걸리니 레퍼런스로 넘겨주거나 전역변수 사용
    • 최종 노드에서 합쳐질때 union 작업 수행
profile
newbieski

0개의 댓글