RiseOJ는 solved.ac와 제휴 관계가 없습니다. 티어 아이콘 © solved.ac. solved.ac
포럼
R00658

진영 배치 호환성

스페셜 저지 — 출력을 사용자 정의 프로그램으로 검사하므로 여러 정답이 인정될 수 있습니다.
Diamond III 다이아몬드 III
난이도
5s
시간 제한
256MB
메모리 제한
0
맞았습니다!!
0
제출 수
0.0%
정답률
레이팅

의견: 0

설명

어느 행성에 \(N\)개의 전초기지가 있다. 각 전초기지는 두 진영 중 하나에 배속되어야 한다. 진영은 \(0\)번(연합)과 \(1\)번(자치)으로 나뉜다.

그런데 정치적 사정으로 \(M\)개의 금지 규칙이 있다. 각 규칙은 네 정수 \(i, a, j, b\)로 주어지며, '전초기지 \(i\)가 진영 \(a\)에 속하고 동시에 전초기지 \(j\)가 진영 \(b\)에 속하는' 배치는 허용되지 않는다는 뜻이다. (즉 그 조합만 금지되며, 둘 중 하나라도 다른 진영이면 괜찮다.)

모든 금지 규칙을 위반하지 않는 진영 배치가 존재하는지 판정하고, 존재한다면 그러한 배치를 하나 출력하여라.

제약

\(1 \le N \le 100{,}000\)

\(1 \le M \le 300{,}000\)

\(0 \le i, j \le N-1\)

\(a, b \in \{0, 1\}\)

입력 형식

첫 줄에 전초기지의 수 \(N\)과 금지 규칙의 수 \(M\)이 주어진다. 전초기지는 \(0\)부터 \(N-1\)까지 번호가 매겨져 있다.

다음 \(M\)개의 줄에 각각 네 정수 \(i\), \(a\), \(j\), \(b\)가 주어진다 (\(0 \le i, j \le N-1\), \(a, b \in \{0, 1\}\)). 이는 '\(i\)가 진영 \(a\)이면서 동시에 \(j\)가 진영 \(b\)인' 배치가 금지됨을 의미한다. \(i = j\)인 규칙도 주어질 수 있다.

출력 형식

조건을 만족하는 배치가 존재하면 첫 줄에 POSSIBLE을 출력하고, 둘째 줄에 각 전초기지의 진영 번호(\(0\) 또는 \(1\))를 공백으로 구분해 \(N\)개 출력한다. 가능한 배치가 여러 가지면 그 중 아무거나 출력하면 된다. 존재하지 않으면 한 줄에 IMPOSSIBLE을 출력한다.

예제 1
입력
3 2
0 1 1 1
0 0 2 0
출력
POSSIBLE
0 0 1
설명

규칙은 '0이 진영 1이고 1도 진영 1'인 배치 금지, '0이 진영 0이고 2도 진영 0'인 배치 금지이다. 배치 \(0\ 0\ 1\) 은 첫 규칙(0이 진영0이라 무관)도, 둘째 규칙(2가 진영1이라 무관)도 어기지 않으므로 한 해가 된다. (다른 유효한 배치도 정답으로 인정된다.)

예제 2
입력
1 2
0 0 0 0
0 1 0 1
출력
IMPOSSIBLE
설명

첫 규칙은 '0이 진영 0'을 금지하므로 0은 진영 1이어야 하고, 둘째 규칙은 '0이 진영 1'을 금지하므로 0은 진영 0이어야 한다. 두 요구가 모순이므로 IMPOSSIBLE이다.

문제 정보

riseoj 작성

출처 Original

평가 및 의견

진영 배치 호환성

개요
출제자 난이도 Diamond III 다이아몬드 III 의견 0 / 50 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

진영 배치 호환성

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8