問題一覧 > 教育的問題

No.3576 写像判定

レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 21
作問者 : 👑 p-adic
ProblemId : 9234 / yukicoder contest 503 (順位表) / 自分の提出
問題文最終更新日: 2026-06-27 09:11:08
yukicoder contest 503の他の問題:

問題文

入力に非負整数 $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もしくは右上の雲マークをクリックしてアカウントを作成してください。