cyj89317   2년 전

1647번 도시 분할 계획을 크루스칼 알고리즘(union-find 사용)으로 풀었습니다.

1197번 최소 스패닝 트리는 단순히 최소 스패닝 트리를 구하는 거고, 1647번은 최소 스패닝 트리를 구해서 마지막에 추가한 간선만 빼주는 문제였습니다

입력의 경우 1197번은 정점의 개수 V(1 ≤ V ≤ 10,000)와 간선의 개수 E(1 ≤ E ≤ 100,000)이었고, 1647번은 각각 그보다 10배씩 많은 N은 정점의 개수 V(2 ≤ V ≤ 100,000)와 간선의 개수 E(1 ≤ E ≤ 1000,000)였습니다.

따라서 메모리 초과가 난다면 1647번일 것이라 생각했는데, 1197번에서만 메모리 초과 또는 런타임 에러 (InvalidPointer)가 났습니다...!!

1647에 제출한 코드를 그대로 답 부분 출력만 바꿔 주고 1197에 제출했는데, 1197이 메모리 초과가 나는 이유가 뭘까요?ㅜㅜ

sth3353   2년 전

7행에서 parent와 ran의 크기를 n이 아닌 n+1로 바꾸어주니 AC입니다.

cyj89317   2년 전

자답 합니다

처음 UnionFind를 만들 때 parent(n+1)로 해 줘야 했네요!! 1부터 n까지니까

1647번은 운이 좋아서 맞은 건지...

cyj89317   2년 전

헉 답변도 달렸군요 감사합니다!! ㅎㅎ

댓글을 작성하려면 로그인해야 합니다.