문제는 안 읽어봤지만 100번 줄에서 ans에 넣는 것이 root[i]들이기 때문에 그럴 것 같네요. 항상 최상단의 노드를 찾도릭 Find(i)로 바꾸면 주석처리한 부분도 작동할 겁니다.
10216번 - Count Circle Groups
오오 그렇네요. 감사합니다!
그런데 왜 저 부분을 Find(i)로 바꿔서 최상단의 노드를 찾아주어야 하나요?
제가 생각했을떈 이미 Union(i,j) 을 통해서 그 작업을 모두 해준것 같아서요.
그럼 그냥 root[i]의 값을 ans에 넣어도 되지 않나요?
반례가 궁금합니다..
Union함수에서 이미 부모 노드를 다 찾아서 두 부모노드가 같지 않으면 Rank를 따져서 합쳐주면서 root[i]의 값을 갱신하는 과정을 거쳤는데도 왜 root[i]를 ans에 넣으면 안되는지가 궁금합니다.
아아 그렇군요! 이제 이해했습니다 ㅎㅎ 감사합니다!
댓글을 작성하려면 로그인해야 합니다.
shinbian11 3년 전
36~45번째 코드를 하니까 틀렸다 나오고, 그 대신 46~50번째 코드로 대체하니까 맞다고 나오는데, 두 코드 덩어리 모두 집합끼리 합친다 라는 정의는 같지 않나요? disjoint - set 처럼 한 건데 왜 36~45번째 코드는 틀린 건가요? 제가 어떤걸 잘못 구현한건지 궁금합니다.