pstopia Notes for Problem Solving Contest

[Medium] P8XMatrixRecovery

Topcoder SRM 527 Div1

Problem

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