티스토리 뷰

Problem/BOJ

11670 - 초등 수학

kesakiyo 2016. 11. 16. 03:29

문제 링크



https://www.acmicpc.net/problem/11670



문제 요약



\(N\)개의 줄에 걸쳐 \(A_i\)와 \(B_i\)가 주어진다. 이 때 각각의 \(A_i\)와 \(B_i\)에 대해 \(+,-,*\)중 하나를 선택해서 나온 결과를 모두 다르게 하고 싶다. 이렇게 연산자들을 선택하는게 가능한지, 가능하다면 어떻게 선택해야 하는지 출력하는 문제다.



문제 풀이



\(N\)이 최대 \(2,500\)개가 들어오기 때문에 완전탐색으로는 불가능하다. 우리는 모든 계산의 결과가 유니크해야하다는 것에 주목할 필요가 있다. \(A_i\)와 \(B_i\)의 쌍을 하나의 정점으로 생각하고 \(+,-,*\)한 결과들에 간선을 연결해 보자. 예제 입력을 그래프로 모델링하면 아래와 같은 결과가 나온다.



그렇다면 우리는 우리는 왼쪽의 파란 정점들과 오른쪽에 주황색 정점들을 1:1 매칭시켜주는 문제로 변형시켜서 풀 수 있다. 이 그래프는 이분 그래프이므로 최대 유량 알고리즘을 통해 쉽게 해결할 수 있다.


그렇다면 불가능한 경우는 어떤 경우일까? 최대 매칭의 수가 \(N\)보다 작을 때 불가능한 경우가 될 것이다.



소스 코드




'Problem > BOJ' 카테고리의 다른 글

1960 - 행렬만들기  (0) 2016.11.21
6241 - Dining  (4) 2016.11.16
13344 - Chess Tournament  (0) 2016.11.15
1208 - 부분집합의 합 2  (0) 2016.11.15
1867 - 돌멩이 제거  (1) 2016.11.14
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함