QOJ.ac

QOJ

実行時間制限: 2.0 s メモリ制限: 256 MB 満点: 100 ハック可能 ✓

#17672. 3-SAT

統計

Busy Beaver는 MIT에 입학하려고 합니다. SAT 시험을 치르는 대신, 그는 더 나은 방법, 즉 세 배 더 나은 방법으로 3-SAT 문제를 해결하기로 했습니다! 그는 정말 놀라운 해결책을 찾아냈지만, 불행히도 지원서의 여백이 너무 좁아 그 해결책을 다 적을 수 없었습니다. 그래서 그는 자신만의 문제 버전을 만들었지만, 이를 해결하기 위해 여러분의 도움이 필요합니다.

$n, m$을 양의 정수라고 합시다. $\{0, 1\}$의 값을 가지는 $n$개의 변수 $x_1, \dots, x_n$이 있습니다. 절(clause)은 $1 \le a \le b \le c \le n$인 인덱스를 가진 세 변수의 곱 $x_a \cdot x_b \cdot x_c$입니다. 여러분은 이러한 절 $m$개의 합으로 이루어진 식을 받습니다. 예를 들어, 4개의 변수와 3개의 절로 이루어진 식은 다음과 같을 수 있습니다.

$$x_1 \cdot x_2 \cdot x_3 + x_1 \cdot x_3 \cdot x_4 + x_2 \cdot x_3 \cdot x_4$$

결과 식을 홀수로 만드는 $x_1, \dots, x_n$의 값을 선택할 수 있는지 결정하십시오.

입력

각 테스트는 여러 개의 테스트 케이스를 포함합니다. 첫 번째 줄에는 테스트 케이스의 수 $t$ ($1 \le t \le 10^5$)가 주어집니다.

그다음 테스트 케이스들에 대한 설명이 이어집니다.

각 테스트 케이스의 첫 번째 줄에는 두 정수 $n, m$ ($1 \le n, m \le 10^5$)이 주어집니다.

각 테스트 케이스의 다음 $m$줄은 합에 포함된 각 절을 설명합니다. $i$번째 줄은 세 개의 공백으로 구분된 정수 $a_i, b_i, c_i$ ($1 \le a_i \le b_i \le c_i \le n$)로 구성되며, 이는 합의 $i$번째 절이 $x_{a_i} \cdot x_{b_i} \cdot x_{c_i}$임을 나타냅니다.

모든 테스트 케이스에 대해 $n$의 합과 $m$의 합은 $10^5$를 넘지 않음이 보장됩니다.

출력

각 테스트 케이스에 대해, 식을 홀수로 만드는 $x_i$ 설정이 존재하면 첫 번째 줄에 YES를 출력하고, 그렇지 않으면 NO를 출력하십시오. 각 문자는 대소문자를 구분하지 않습니다. 예를 들어, yes, Yes, YeS 모두 긍정적인 답변으로 인식됩니다.

그 후, YES라고 응답했다면, 식을 홀수로 만드는 $x_1, \dots, x_n$ ($x_i = 0$ 또는 $1$)을 공백으로 구분하여 두 번째 줄에 출력하십시오. 가능한 해가 여러 개라면, 그중 아무거나 출력해도 됩니다.

서브태스크

각 서브태스크에서 YES/NO 응답이 정확하면 점수의 50%를 받으며, 제공된 $x_i$ 값이 정확해야 나머지 점수를 받을 수 있습니다. 부분 점수를 받기 위해서는 각 테스트 케이스마다 정확히 $n$개의 $x_i$ 값을 출력해야 합니다.

  • (50점): 각 절 내에서 변수는 한 번만 나타납니다. 즉, $a_i < b_i < c_i$입니다.
  • (50점): 추가 제약 조건이 없습니다.

예제

입력 1

2
4 3
1 2 3
1 3 4
2 3 4
3 2
1 2 3
1 2 3

출력 1

YES
1 1 1 1
NO

참고

첫 번째 테스트 케이스는 문제 설명의 예시와 동일합니다. 이 식에서 모든 변수를 1로 설정하면 식의 값은 $1 + 1 + 1 = 3$이 되며, 이는 홀수입니다.

두 번째 테스트 케이스에서 주어진 식은 $x_1 \cdot x_2 \cdot x_3 + x_1 \cdot x_2 \cdot x_3$입니다. $x_1, x_2, x_3$를 어떻게 설정하더라도 이 식을 홀수로 만들 수 없음이 증명될 수 있습니다.

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.