u_find 에서 만약 자신이 곧바로 루트와 연결되어있다면 루트는 자기 자신과의 거리가 0 이므로 어자피 거리갱신이 되지 않을 것이고 만약 루트였던 노드가 다른 노드에 연결되어 루트가 바뀐 상태라면 자신부터 새로운 루트까지의 거리는 부모로부터 새로운 루트까지의 거리를 더해줘야 할 것이므로 더해줍니다.
merge에서는 두 트리를 합칠 때, 한쪽에 속한 a와 다른 한쪽에 속한 b가 있을 때
a와 b의 거리가 w라면
w + dist[b] = dist[a] + a의 루트 ~ b의 루트까지의 거리 " 가 성립해야 하므로
a의 루트에 dist[b]+w-dist[a] 를 넣어주고 p[a의 루트] = b의 루트 로 설정해줍니다.
p_ce1052 3년 전
해볼 수 있는 예제는 많이 해 본 것 같은데 자꾸 틀렸습니다가 뜨네요.
//함수설명
u_find 에서 만약 자신이 곧바로 루트와 연결되어있다면 루트는 자기 자신과의 거리가 0 이므로 어자피 거리갱신이 되지 않을 것이고 만약 루트였던 노드가 다른 노드에 연결되어 루트가 바뀐 상태라면 자신부터 새로운 루트까지의 거리는 부모로부터 새로운 루트까지의 거리를 더해줘야 할 것이므로 더해줍니다.
merge에서는 두 트리를 합칠 때, 한쪽에 속한 a와 다른 한쪽에 속한 b가 있을 때
a와 b의 거리가 w라면
w + dist[b] = dist[a] + a의 루트 ~ b의 루트까지의 거리 " 가 성립해야 하므로
a의 루트에 dist[b]+w-dist[a] 를 넣어주고 p[a의 루트] = b의 루트 로 설정해줍니다.