문제 설명

: 어느 점에서라도 만나게 되는 무게 a인 가로선과 b인 세로선을 집어가면, a*b 만큼의 점수를 획득할 때,
최대로 한 쌍의 선들을 집어가면서, 점수를 크게하는 문제이다.


왼쪽에는 가로 선들의 집합을, 오른쪽에는 세로 선들의 집합인 이분 그래프를 형성 한 뒤,
MCMF 알고리즘을 이용해서 해결이 가능하다.

가로선은 x축에 평행하고 세로선은 y축에 평행하므로 선들이 만나는가에 대해서는 ccw까지 구현 할 필요가 없고,
간단하게 좌표 범위들로만 확인해서 연결 여부만 확인하면 된다.

MCMF 알고리즘 자체가 일단 최대로 유량을 흘려보내는 것이 목적이고, 그러면서 코스트는
최소화 하는 방향으로 작동하기 때문에 이 문제 조건에서는 코스트의 부호를 반대로 해주어서 가중치 그래프를 형성하면 우선순위로 최대로 유량을 흘려보내면서 두번째로 코스트 또한 큰 방향으로 구해낼 수 있다. (당연히 답을 도출 할 때에는 다시 부호를 바꾸어 주어야 한다.)


* 이 문제와는 관련이 없지만, 만약에 점수만을 최대화 하는 조건이라고 한다면 61번줄에 주석 친 부분을 사용하게 되는데, 이 경우에는 꼭 최대로 유량을 흘리지는 않지만,  코스트는 무조건 최대치까지 도달 할 수 있게된다.




문제링크 [8992 : Pickup Game]



소스 코드



'BOJ' 카테고리의 다른 글

1937] 욕심쟁이 판다  (0) 2016.10.14
2306] 유전자  (0) 2016.09.25
8462] 배열의 힘 & Mo's Algorithm  (0) 2016.08.20
1941] 소문난 칠공주  (0) 2016.08.14
1052] 물병  (0) 2016.07.22