[Medium] P8XMatrixRecovery
Topcoder SRM 527 Div1
'0', '1', '?' 가 적당히 배치된 rows[] 와 columns[] 가 있을 때
이 조건을 만족하는 해가 존재하는지 확인하는 방법을 알고 있다고 하자.
이 때, 사전순으로 가장 앞서는 답을 만들어내는 방법은 다음과 같다.
rows의 원소들을 왼쪽 위에서부터 차례대로 훑으면서
'?' 를 만나면 일단 '0' 으로 치환한 후에 해가 존재하는지 확인한다.
존재하면 넘어가고, 존재하지 않는다면 '1' 로 치환한 후 다음으로 넘어가면 된다.
조건을 만족하는 해가 존재하는지 확인하는 방법은 간단하다.
rows 의 i번째 열과 columns[j] 가 서로 호환 가능하면 서로 간선을 이어준다.
이렇게 하면 양쪽에 정점이 각각 m개인 이분그래프가 나오고
여기서 최대이분매칭의 개수가 m개면 조건을 만족하는 해가 존재하는 것이다.
시간복잡도는 O(n * m * 이분매칭)