問題一覧 > 教育的問題

No.2536 同値性と充足可能性

レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限 : 512 MB / スペシャルジャッジ問題 (複数の解が存在する可能性があります)
タグ : / 解いたユーザー数 65
作問者 : 👑 p-adicp-adic / テスター : 遭難者遭難者 hiro1729hiro1729
1 ProblemId : 10017 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2024-01-02 18:05:18

注意

コンテスト終了後に、出力形式に厳格に従う必要がある旨を明記しました。

問題文

入力の最初に $2$ 個の正整数 $N, M$ が与えられます。

 

ある村には同値大好きbotという $N$ 体のbotが暮らしており、それらは $N$ 以下の各正整数 $i$ で番号付けられて同値大好きbot $i$ と呼ばれています。

村を訪れたあなたは $N$ 体の同値大好きbotのうち半分以上(つまり $\frac{N}{2}$ 以上の個数)を選んで連れて帰ろうと考えています。ただし選び方に関して同値大好きbotたちには合計 $M$ 個の要望があり、あなたは $M$ 個全ての要望に従いたいと考えています。

同値大好きbotたちの要望は $i < j$ を満たす $N$ 以下の正整数 $i,j$ と<==><=/=>のいずれかである文字列 $E$ を用いて $(i,E,j)$ と表され、$(i,E,j)$は

  • $E$ が<==>である場合「自分たちを両方とも選ぶか、さもなくばどちらも選ばないで欲しい」
  • $E$ が<=/=>である場合「自分たちのうち片方だけ(ちょうど $1$ 体)を選んで欲しい」

という同値大好きbot $i$ と同値大好きbot $j$ の $2$ 体からの要望を表します。

 

$N$ 体の同値大好きbotのうち半分以上をあなたが選ぶ方法であって $M$ 個全ての要望に従うものが存在するかを判定し、存在する場合はそのような選び方を1つ求めてください。

背景

$N$ 以下の各正整数 $i$ に対し「あなたが同値大好きbot $i$ を選んで連れ帰る」という命題を $P_i$ と置きます。各要望 $(i,E,j)$ は $E$ が<==>の場合 $P_i \Leftrightarrow P_j$ という命題で表わせ、$E$ が<=/=>の場合 $P_i \not\Leftrightarrow P_j$ という命題で表わせます。この問題は、要望を表す $M$ 個の命題と「$N$ 体の同値大好きbotのうち半分以上をあなたが選んで連れ帰る」という命題の合計 $M+1$ 個の命題を $\land$ で結んで得られる命題の充足可能性に関する問題とみなせます。

ここで、$N$ 以下の正整数の集合を $I_N$ と置き、要素数が $2^{-1} N$ 以上である $I_N$ の部分集合全体の集合を $U_N$ と置きます。すると任意の $S \in U_N$ に対し、「あなたが連れ帰る同値大好きbotの番号全体の集合が $S$ である」という命題は $(\bigwedge_{i \in S} P_i) \land (\bigwedge_{i \in I_N \setminus S} (\neg P_i))$ と表すことができます。このことから、「$N$ 体の同値大好きbotのうち半分以上をあなたが選んで連れ帰る」という命題は $\bigvee_{S \in U_N} ((\bigwedge_{i \in S} P_i) \land (\bigwedge_{i \in I_N \setminus S} (\neg P_i)))$ と表すことができます。

以上よりこの問題は、命題変数に $\Leftrightarrow$ か $\not\Leftrightarrow$ を適用して得られる $M$ 個の命題と $\bigvee_{S \in U_N} ((\bigwedge_{i \in S} P_i) \land (\bigwedge_{i \in I_N \setminus S} (\neg P_i)))$ の合計 $M+1$ 個の命題を $\land$ で結合した命題の充足可能性に関する問題とみなせます。

入力

以下、$M$ 以下の各の正整数 $m$ に対し $m$ 個目の要望を $(i_m,E_m,j_m)$ と表します。

この時、入力は以下の形式で標準入力から $1 + M$ 行で与えられます:

  • $1$ 行目に $N, M$ が半角空白区切りで与えられます。
  • $M$ 以下の各正整数 $m$ に対し、$1 + m$ 行目に $m$ 個目の要望 $(i_m,E_m,j_m)$ の各成分 $i_m,E_m,j_m$ が半角空白区切りで与えられます。
$N$ $M$
$i_1$ $E_1$ $j_1$
$\vdots$
$i_M$ $E_M$ $j_M$

制約

入力は以下の制約を満たします:

  • $N$ は $2 \leq N \leq 10^5$ を満たす整数である。
  • $M$ は $1 \leq M \leq \min \{10^5,N(N-1)\}$ を満たす整数である。
  • $M$ 以下の任意の正整数 $m$ に対し、
    • $i_m,j_m$ は $1 \leq i_m < j_m \leq N$ を満たす整数である。
    • $E_m$ は<==><=/=>のいずれかの文字列である。
  • $M$ 以下の任意の正整数 $\ell, m$ に対し、$\ell \neq m$ ならば $(i_{\ell},E_{\ell},j_{\ell}) \neq (i_m,E_m,j_m)$ である。

出力

$N$ 体の同値大好きbotのうち半分以上をあなたが選ぶ方法であって $M$ 個全ての要望に従うものが存在しないならばNoと出力してください。

No

存在する場合は $1$ 行目にYesと出力し、$2$ 行目と $3$ 行目にそのような選び方の例を以下の形式で出力してください:

  • 選ぶ同値大好きbotの個数 $n$ を $2$ 行目に出力してください。
  • 選ぶ同値大好きbot $n$ 体の番号を小さい順に重複なく半角空白区切りで $3$ 行目に出力してください。
Yes
$n$
(選ぶ同値大好きbotの番号のうち $1$ 番目に小さいもの) $\cdots$ (選ぶ同値大好きbotの番号のうち $n$ 番目に小さいもの)

この問題はスペシャルジャッジ問題です。正解が複数ある場合はどれを出力しても構いません。

ただし出力の形式は上述したものを守ってください。例えば末尾に余計な空白を入れた場合のジャッジの挙動は保証されません。

最後に改行してください。

サンプル

サンプル1
入力
2 1
1 <==> 2
出力
Yes
2
1 2

出ている要望は

  • 同値大好きbot $1$ と同値大好きbot $2$ の「自分たちを両方とも選ぶか、さもなくばどちらも選ばないで欲しい」という要望

の $1$ つだけです。同値大好きbot $1$ と同値大好きbot $2$ の $2$ 体を選ぶことでこの要望に従うことができ、$2$ は $N = 2$ の半分 $2^{-1} N = 1$ 以上です。出力形式の制約から

Yes
2
2 1

と出力すると不正解となることに注意してください。

サンプル2
入力
2 2
1 <==> 2
1 <=/=> 2
出力
No

出ている要望は

  • 同値大好きbot $1$ と同値大好きbot $2$ の「自分たちを両方とも選ぶか、さもなくばどちらも選ばないで欲しい」という要望
  • 同値大好きbot $1$ と同値大好きbot $2$ の「自分たちのうち片方だけを選んで欲しい」という要望

の $2$ つです。このように同値大好きbotたちは矛盾した要望を出すことがあります。これら全ての要望に従う選び方は存在しません。

サンプル3
入力
3 2
1 <=/=> 2
2 <=/=> 3
出力
Yes
2
1 3

出ている要望は

  • 同値大好きbot $1$ と同値大好きbot $2$ の「自分たちのうち片方だけを選んで欲しい」という要望
  • 同値大好きbot $2$ と同値大好きbot $3$ の「自分たちのうち片方だけを選んで欲しい」という要望

の $2$ つです。同値大好きbot $1$ と同値大好きbot $3$ の $2$ 体を選ぶことでこの要望に従うことができ、$2$ は $N = 3$ の半分 $2^{-1} N = 1.5$ 以上です。

サンプル4
入力
3 3
1 <==> 2
2 <==> 3
1 <=/=> 3
出力
No

出ている要望は

  • 同値大好きbot $1$ と同値大好きbot $2$ の「自分たちを両方とも選ぶか、さもなくばどちらも選ばないで欲しい」という要望
  • 同値大好きbot $2$ と同値大好きbot $3$ の「自分たちを両方とも選ぶか、さもなくばどちらも選ばないで欲しい」という要望
  • 同値大好きbot $1$ と同値大好きbot $3$ の「自分たちのうち片方だけを選んで欲しい」という要望

の $3$ つです。これら全ての要望に従う選び方は存在しません。

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。