ネタ帳

数学ネタの備忘録です。

競技プログラミングでも出題されそうな数学オリンピックの問題

この記事では、数学オリンピックで出題された問題を競技プログラミングの形式に変換して紹介します(変換とは言ったものの、制約以外一切改変なしです)。実行時間とメモリの制限は2秒、1024MB程度を想定しています。

問題

N 頂点 M 辺の連結な単純無向グラフが与えられます。頂点には 1, 2, \ldots, N の番号が、辺には 1, 2, \ldots, M の番号が振られており、辺 i は頂点 U_iV_i を結びます。数列 A_1, A_2, \ldots, A_NB_1, B_2, \ldots, B_M であって、次の条件を満たすものを 1 つ構築してください。

  • A_i1 または 2
  • B_i1 または 2 または 3
  • 頂点 v に対して S_v\displaystyle S_v = A_v + Σ_{頂点vは辺iの端点である} B_i で定める。2 つの頂点 vw が隣接するとき、S_v \neq S_wである。

(出典:Baltic Way 2020 Problem 9 Baltic Way 2020 – virtual competition

制約

  • 2 \leq N \leq 10^5
  • 1 \leq M \leq 10^5
  • 1 \leq U_i \leq N
  • 1 \leq V_i \leq N
  • 与えられるグラフは連結な単純グラフである。

解説