코딩/랜덤 플레 디펜스

BOJ 16056 - Plug It In

stonejjun 2021. 8. 23. 17:43

문제 링크 : https://www.acmicpc.net/problem/16056

문제 풀이

문제에서 주어진 정보를 그래프처럼 생각하면 정점을 가구와 콘센트 두 종류로 분류할 수 있다. 그리고 모든 간선은 가구와 콘센트 사이만을 잇는다. 즉, 이분그래프가 나오게 된다는 것이다. 그리고 최대 매칭값을 비슷하게 구하는 문제이기 때문에 이분 매칭을 떠올릴 수 있다.

이 문제의 가장 큰 특징은 하나의 콘센트에만 멀티탭을 꽃아서 3개의 가구와 연결을 시킬 수 있다는 것이다. 

생각을 해보자. 한번 이분매칭 했을 때 추가로 이을 가구가 존재하지 않는다면 그대로 답이 될 것이며, 연결이 되지 않은 두 개의 가구가 같은 콘센트에 매칭이 될 수 있으면 그 콘센트에 플러그를 꽃아 2개의 추가매칭을 만들 수 있다. 그렇지 않다면 1개의 추가 매칭을 만들 수 있다.

다르게 생각해보자. 어떠한 콘센트가 존재해서 그 콘센트에서 추가로 두개의 매칭을 할 수 있으면 답에 2를 더할 수 있다. 이분매칭을 할 때 정점을 순회하면서 매칭을 하나씩 추가시키는데, 모든 정점이 아니라 하나의 정점을 두번 추가로 생각해서 매칭을 두번 추가 시킬 수 있는지 각 정점에 대해서 보면 된다. 

구현 과정에서 맨 처음 전체 이분 매칭을 한 전체 상태를 저장하고 있다가 그 상태에 대해서 추가 매칭을 할 수 있는지 확인해야한다. 시간 복잡도는 $O(VE)$.

'코딩 > 랜덤 플레 디펜스' 카테고리의 다른 글

BOJ 1591 - 수열 복원  (0) 2021.08.23
BOJ 2802 - 크레용  (0) 2021.08.23
BOJ 1989 - 부분배열 고르기 2  (0) 2021.08.14
랜덤 플레 디펜스 기록장  (0) 2021.08.13
랜덤 플레 디펜스 튜토리얼  (0) 2021.08.13