No.3576 写像判定
問題文
入力に非負整数 $N$ と、非負整数の $2$ つの組が $N$ 組与えられます。
与えられた $N$ 組からなる集合を $F$ と置きます。
すなわち $N$ 以下の各正整数 $i$ に対し $i$ 組目に与えられる組を $(s_i,t_i)$ と書き表すと、$F = \{(s_i,t_i) \mid i \in \N \cap [1,N]\} = \{(s_1,t_1), \ldots, (s_N,t_N)\}$ です。
$F$ が良い集合であるとは、$F$ が次の性質を満たすということです:
- $F$ の任意の要素 $(s,t)$ と $(s',t')$ に対し、$s = s'$ ならば $t = t'$ である。
$F$ が良い集合であるか否かを判定してください。
背景
$F$ が良い集合であるということは、$F$ が写像であることに他なりません。すなわちこの問題は、 $F$ が写像か否かを判定する問題となります。
写像についてもっとよく知りたい人向けの補足はこちらです。(クリックで開く)
まずは大雑把なイメージを説明します。写像は関数の一般化で、定義域(代入できる値全体の集合)を自由に設定でき、値も数とは限らない範囲で自由に設定できる概念です。今回は定義域が非負整数全体の集合の部分集合であり、値が非負整数であるような写像のみを考えていることになります。
写像自体は集合であり、写像 $f$ の要素は定義域の各要素 $x$ をわたる組 $(x,f(x))$ です。一見不思議な集合に見えるかもしれませんが、c++のmapを想像すると分かりやすいかもしれません。
この問題を解く上では以上の大雑把な理解で十分ですが、定義域や代入の厳密な定式化が知りたい人向けの説明をします。$f$ が写像である時、その要素である組 $(s,t)$ の第 $1$ 成分 $s$ 全体の集合
$\displaystyle \{s \mid \exists t[(s,t) \in f]\} $
を $f$ の定義域と言い、第 $2$ 成分 $t$ 全体の集合
$\displaystyle \{t \mid \exists s[(s,t) \in f]\} $
を $f$ の値域といい、また値域を含む集合を固定している文脈ではそのような集合を $f$ の終域と呼びます。
$f$ とその定義域の要素 $s$ を固定すると、写像の定義から $(s,t) \in f$ を満たす $t$ がただ1つ定まるため、それを $f(s)$ と書き表します。その意味で、 $f(s)$ が定義されるのは $s$ が $f$ の定義域に属する時だけなので、$f$ の定義域とはまさに $f(s)$ が定義される領域のことに他なりません。
この $()$ を用いた表記や定義域という用語から推測できるように、写像という概念は(一価)関数の集合論における一般化として使われます。実際、皆さんの知っている関数のグラフを思い浮かべていただければ、それが(グラフ上の点全体の集合として)写像の定義を満たすことを納得していただけると思います。
例えば集合 $f = \{(0,3),(1,2),(2,5)\}$ は集合 $\{0,1,2\}$ を定義域に持つ写像であり、
$\displaystyle \begin{array}{rcl} \displaystyle f(0) &\displaystyle = &\displaystyle 3 \\ \displaystyle f(1) &\displaystyle = &\displaystyle 2 \\ \displaystyle f(2) &\displaystyle = &\displaystyle 5 \end{array} $
を満たします。
入力
入力は次の形式で標準入力から $1 + N$ 行で与えられます:
- $1$ 行目に $N$ が与えられます。
- $N$ 以下の各正整数 $i$ に対し、$1 + i$ 行目に $s_i, t_i$ が半角空白区切りで与えられます。
$N$ $s_1$ $t_1$ $\vdots$ $s_N$ $t_N$
制約
入力は以下の制約を満たします:
- $N$ は $0 \leq N \leq 10^5$ を満たす整数である。
- $N$ 以下の任意の正整数 $i$ に対し、
- $s_i$ は $0 \leq s_i \leq 10^5$ を満たす整数である。
- $t_i$ は $0 \leq t_i \leq 10^5$ を満たす整数である。
出力
$F$ が良い集合である場合はYesと出力し、そうでない場合はNoと出力してください。
最後に改行してください。
サンプル
サンプル1
入力
1 0 1
出力
Yes
$F = \{(0,1)\}$ は良い集合です。
写像を知っている人向けに言うと、$F$ は $\{0\}$ を定義域に持ち $F(0) = 1$ を満たす写像です。
サンプル2
入力
2 1 0 0 0
このように $s_0 \leq s_1$ でない場合もあります。
出力
Yes
$F = \{(1,0),(0,0)\}$ は良い集合です。
写像を知っている人向けに言うと、$F$ は $\{0,1\}$ を定義域に持ち $F(0) = F(1) = 0$ を満たす写像です。
サンプル3
入力
2 0 1 0 2
出力
No
$F = \{(0,1),(0,2)\}$ です。
$(0,1) \in F$ かつ $(0,2) \in F$ かつ $1 \neq 2$ であるので、$F$ は良い集合ではありません。
サンプル4
入力
2 0 1 0 1
このように $(s_0,t_0) \neq (s_1,t_1)$ でない場合もあります。
出力
Yes
$F = \{(0,1),(0,1)\} = \{(0,1)\}$ はサンプル1と同じ集合なので良い集合です。
提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。