삶의 8.29 의미

문제의 의미

(A)에 \ (\ N-)\ (m의 \) 그래프의 자유 에지는 무향 그래프위한 동작, 즉, 즉 모든 접속 블록에 걸친 도면 생성 숲의 제거 (설정할 ). 그래프의 가장자리가 무향 그래프를 삭제 될 때까지 작동을 계속합니다. 양쪽의 경우, 그 출력은 처음 몇 시간에서 제거 하였다.

하나의 출력에 여러 솔루션이있는 경우


해결

첫째, 우리는 좋은 생각을 가지고 \을 (O (MN) \) 폭력

각각 스패닝 트리의 동작 각각의 에지를 이송 : 구체적으로는 끊긴 세트의 측면에 블록 측의 두 개의 끝 지점, 유니콤 넣어 동일한 통신하지 않으면, 열마다 측면에서 삭제, 그렇지 않은 가장자리를 건너

우리는 폭력에 대한 알고리즘을 최적화하는 방법을 고려

만약 우리가 각 측면을 위해 여러 분리 된 세트, 하나를 열면 \ (1 \) 번호는 통신 블록에 접속 된 단부의 초점을 확인 우리 막 \ (2 \) 번호 조사 등등 삽입 초점을 맞추고, 그리고 ...

위의 방법으로, 우리는 각 작업 후에 형성 스패닝 숲을 찾을 수 있습니다

그러나 우리는이 알고리즘은 원본에 비해뿐만 아니라 시간 복잡도, 공간의 복잡성을 변경하지 않고 더 열등한 될 것을 발견 할 것이다

그러나 알고리즘의 아이디어는 어떤 계몽있다

우리는 속성을 찾을 수 있습니다 한쪽를 들어,이에있을 수있는 경우 \ (나는 \) 해상도와 집중 삽입 검사가, 다음도 가능하다의 (I + 1 ... n은 \) \의 번호와 집중 삽입을 확인

이것은 모순에 의해 입증 될 수있다, 또한 암묵적인 이해 될 수있다

앞으로이 발견, 우리는 첫 번째 두 개의 분리 된 세트의 번호로 삽입 할 수 있습니다 분리 할 수 ​​있습니다

따라서, 시간 복잡도 의해 \ (O (MN) \) 하도록 최적화 \ (O (MlogM) \)

하지만 여전히 공간의 복잡성을 감당할 수없는

이 시점에서 우리는 해시 테이블 공간을 최적화 할 수 있습니다

우리는 함께 행의 수를 설정된 이산, 복수의 라인으로 볼 수 \ (\ N-) 행렬의 열이

각 매트릭스의 좌표 (\ (X, Y)는 \ ) 의 특정 번호에 매핑

까지 우리 작업의 과정에서 삽입 \ (2M \) 다른 점

그래서만을 분리 된 세트 열 필요가 \ (O (2M) \) 에 공간을

동적 점을 엽니 포인터하십시오 상 작업이있다? ? ! 그러나 처음에없는 아주 좋은 포인터를 중얼 거렸다


코드

추천

출처www.cnblogs.com/VeniVidiVici/p/11432037.html