X-Mart

시간 제한1초메모리 제한128 MB

요약
각 고객이 최대 두 제품은 유지, 최대 두 제품은 철수하라고 투표할 때, 모든 고객을 만족시키는 유지/철수 배정이 존재하는지 판정한다.
난이도

보통10점 중 7점

유형
그래프, DFS, 구현, 수학
정답자
아직 제출이 없습니다

문제

유명 슈퍼마켓 체인 X-Mart는 비용을 줄이기 위해 매장 진열대에 두는 제품의 종류를 줄이기로 했다. 마케팅 부서는 이 결정이 매출에 영향을 줄까 걱정했고, 제품 종류 축소를 오히려 고객 관계를 개선할 기회로 삼기로 했다.

그래서 X-Mart는 인터넷 설문을 열어, 고객이 매장에 계속 남겨 두었으면 하는 제품과 진열대에서 빼기를 원하는 제품을 직접 고르게 했다. 현재 판매 중인 제품 목록은 인터넷에 공개되었다.

설문을 간단히 하기 위해, 각 고객은 계속 팔기를 원하는(찬성) 제품을 최대 2개, 그만 팔기를 원하는(반대) 제품을 최대 2개까지 고를 수 있다.

모든 투표를 데이터베이스에 모은 뒤, 마케팅 부서는 투표한 모든 고객을 만족시키는 새 제품 목록을 고를 수 있는지 알고 싶어 한다. 어떤 고객은 자신이 찬성한 제품 중 적어도 하나가 실제로 유지되고, 동시에 자신이 반대한 제품 중 적어도 하나가 실제로 빠졌을 때 만족한다. 한 고객이 같은 제품을 찬성과 반대에 동시에 투표하는 경우는 없다고 가정해도 된다.

입력

프로그램은 여러 개의 테스트 케이스를 처리해야 한다. 각 테스트 케이스의 첫 줄에는 고객 수 CC와 제품 수 PP를 나타내는 두 정수가 주어진다 (1≤C≤10001 \le C \le 1000, 1≤P≤100001 \le P \le 10000). 이어지는 CC개의 줄은 각각 한 고객의 선호를 네 정수 XX, YY, SS, TT로 나타낸다 (0≤X,Y,S,T≤P0 \le X, Y, S, T \le P). XX와 YY는 그 고객이 계속 팔기를 원하는 제품이고, SS와 TT는 그만 팔기를 원하는 제품이다. XX, YY, SS, TT 중 어떤 값이 00이면 그 투표는 사용하지 않았다는 뜻이다. C=P=0C = P = 0인 줄은 입력의 끝을 나타낸다.

출력

각 테스트 케이스마다 한 줄을 출력한다. 투표한 모든 고객을 만족시킬 수 있으면 yes를, 불가능하면 no를 출력한다.

예제3

  1. 예제 1

    입력
    3 4 
    1 2 3 4 
    3 4 1 2 
    2 3 1 4 
    4 4 
    1 2 3 4 
    3 4 1 2 
    1 3 2 4 
    1 4 2 3 
    4 4 
    1 2 3 4 
    3 4 1 0 
    1 3 2 4 
    2 4 0 3
    0 0
    
    예상 출력
    yes
    yes
    no
    
  2. 예제 2

    입력
    1 2
    1 0 2 0
    0 0
    
    예상 출력
    yes
    
  3. 예제 3

    입력
    2 2
    1 0 2 0
    2 0 1 0
    0 0
    
    예상 출력
    no