BOJ 3972 Suiting Weavers
문제 내용
어떤 개미 종류는 식물의 잎에서 나오는 섬유를 가지고 집을 짓습니다. 암컷 개미는 가장 큰 집을 지은 수컷 개미와 짝짓기를 합니다.
윌리를 포함한 마리의 개미가 각자의 집을 지으려고 합니다. 번째 개미의 위치는 이며, 그 개미의 집의 현재 크기(집을 구성하고 있는 섬유의 양)는 입니다. 윌리는 1번째 개미입니다.
집의 재료가 되는 섬유는 개의 위치에 흩어져 있습니다. 번째 장소의 위치는 이며, 그 장소에는 만큼의 섬유가 있습니다.
각자의 개미는 그 개미가 다닐 수 있는 영역이 있습니다. 이 영역은 그 개미의 집을 중심으로 반지름 인 원 모양이며, 그 개미는 자신의 영역 내부(테두리 포함)에 있는 섬유만 가져올 수 있습니다.
모든 개미가 집짓기를 완료했을 때, 윌리의 집보다 큰 집이 없을 가능성이 조금이라도 존재하는지 구하세요.
입력
첫 번째 줄에는 테스트 케이스의 개수 가 주어집니다. ()
각 테스트 케이스에 대해, 첫 번째 줄에는 와 가 주어집니다. (, )
다음 줄에는 각각의 개미 에 대해 , , , 가 순서대로 한 줄에 주어집니다. (, )
다음 줄에는 각각의 장소 에 대해 , , 가 순서대로 한 줄에 주어집니다. (, )
출력
각 테스트 케이스에 대해, 윌리의 집보다 큰 집이 없을 가능성이 있다면 Suiting Success, 없다면 Lonesome Willy를 출력합니다.
문제 풀이
스포일러
먼저, 윌리 입장에서는 자신의 영역에 있는 모든 섬유를 쓸어오는 것이 이득입니다. 이때 윌리의 집의 크기를 라고 합시다. 이제 나머지 개미들이 남은 섬유를 잘 분배하여 모든 집의 크기가 이하가 되도록 할 수 있는지를 확인하면 됩니다.
이를 판별하기 위해서는 다음과 같은 플로우 모델링을 할 수 있습니다.
- 번째 개미에게 줘도 되는 섬유의 양은 입니다. source에서 개미 로 의 용량을 갖는 간선을 추가합니다.
- 번째 개미가 번째 장소에 접근할 수 있다면, 개미 에서 장소 로 무제한 용량을 갖는 간선을 추가합니다.
- 장소 에서 sink로 의 용량을 갖는 간선을 추가합니다.
이때 모든 섬유의 분배가 가능한 것은 남은 모든 섬유의 합만큼의 플로우가 흐를 수 있는 것과 동치입니다. 단, (윌리를 제외한) 아무 개미도 접근할 수 없는 섬유는 제외해야 합니다. 또한, 인 개미 가 존재한다면 자동으로 불가능이 됩니다.