find()함수가 부모 노드를 하나씩 검사하는 알고리즘이라면 시간복잡도가 O(V)가 되고 따라서 merge()함수도 시간복잡도가 O(V)가 되네요
그래서 main()함수 반복문에서 시간복잡도가 O(VE)가 되서 시간초과가 발생하는 것 같습니다!!
1626번 - 두 번째로 작은 스패닝 트리
find()함수가 부모 노드를 하나씩 검사하는 알고리즘이라면 시간복잡도가 O(V)가 되고 따라서 merge()함수도 시간복잡도가 O(V)가 되네요
그래서 main()함수 반복문에서 시간복잡도가 O(VE)가 되서 시간초과가 발생하는 것 같습니다!!
tree에서 LCA 알고리즘 사용하였을 때 O(log n)으로 구할 수 있긴 하고 par[][]배열에서 LCA 알고리즘과 비슷한 방식으로 사용하신 것 같긴 한데...
parent배열에서는 이렇다 할 전처리과정이 보이지 않아서요
저 상태라면 부모노드를 2^k만큼 jump해서 찾는 것이 아니고 한칸씩 올라가면서 찾는 것이라 O(V)이 걸리지 않나요?
댓글을 작성하려면 로그인해야 합니다.
san9407 5년 전
구글링 해보면 second max값이나 이진서치 이용해서 구하던데(lca에서 최대값 구하는 부분에 추가해서)
저는 위에것들 추가도 안했으니 오히려 계산은 적어야할거 같은데
계속 시간초과네요 ㅠㅠ
어디서 시간초과인지 알려주시면 감사하겠습니다!