QOJ.ac

QOJ

Süre Sınırı: 10 s Bellek Sınırı: 512 MB Toplam puan: 100 Zorluk: [göster] Hack'lenebilir ✓

#1222. 多角形

İstatistikler

久莲は問題を作るのが好きな女の子です。

今年の World Final が終わってから、久莲は計算幾何をとても好きになりました。そこで、NOI の試験でも計算幾何の問題を出そうと考えました。これは、問題名だけが計算幾何と関係する問題です。

まず、久莲は $n$ 個($n\ge2$)の頂点からなる根付き木 $T$ を与えました。根の番号は $1$ です。根以外で次数がちょうど $1$ の頂点をすべて葉と定義します。下図は木 $T$ の例であり、葉の集合は $\{3,4,5\}$ です。

problem_1222_29bb8620f60847af6b7a87ca07161e72.png

次に、久莲はこの木から数列 $A$ を構築しました。

  • 根から木全体を深さ優先探索します。探索では、子を番号の小さい順に訪問します。これにより木 $T$ の DFS 順序が得られます。
  • 続いて、DFS 順序での出現順にすべての葉を並べ、数列 $A$ を得ます。

さらに、久莲は数列 $A$ を用いて、2つの葉 $u,v$ の距離 $d(u,v)$ を定義しました。$u$ が $A$ の $i$ 番目の要素、$v$ が $j$ 番目の要素であるとすると、$d(u,v)=\min(|i-j|,|A|-|i-j|)$ です。ここで $|A|$ は数列の長さ、すなわち $T$ の葉の数であり、$i,j$ は1から数えた出現位置です。

上の例では、数列 $A$ は $[4,5,3]$ であり、$d(3,5)=d(3,4)=d(4,5)=1$ です。$3,4,5$ の出現位置はそれぞれ $3,1,2$ です。

最後に、久莲はパラメータ $K$ を与えました。この根付き木 $T$ と数列 $A$ を用いて、$n$ 頂点からなる多重辺も自己ループもない無向グラフ $G$ を構築できます。異なる2頂点 $u,v$ の間に辺があるのは、次の条件の少なくとも一方を満たす場合、かつその場合に限ります。

  • 木 $T$ に $u,v$ を結ぶ辺が存在する。
  • 木 $T$ で $u,v$ がともに葉であり、$d(u,v)\le K$ である。

$K=1$ または $2$ のとき、上の例から得られるグラフ $G$ は、どちらも下図のようになります。

久莲は、$G$ に含まれる異なるハミルトン閉路の数を求めてほしいと考えています。答えは大きくなる可能性があるため、$998244353$ で割った余りを出力してください。

problem_1222_cada1236b9bea63818a7372f7f4fb42a.png

以下に補足の定義を示します。

  • 多重辺も自己ループもない無向グラフ $G$ のハミルトン閉路 $H$ とは、$G$ の辺の部分集合であって、各頂点に接続する異なる辺がちょうど2本ずつ $H$ に含まれ、任意の2頂点が $H$ の辺を通って直接または間接的に到達可能であるものです。
  • 多重辺も自己ループもない無向グラフ $G$ の2つのハミルトン閉路 $H_1,H_2$ が異なるのは、$H_1$ に含まれ、$H_2$ に含まれない辺 $e$ が存在する場合、かつその場合に限ります。

入力

ファイル polygon.in からデータを読み込みます。

1行目には2つの整数 $n,K$ が入力され、木 $T$ の頂点数と、久莲が選んだパラメータ $K$ を表します。

2行目には $n-1$ 個の整数 $f_i$($1\le f_i\le i$)が入力されます。$f_i$ は、木 $T$ に辺 $(f_i,i+1)$ が存在することを表します。

出力

ファイル polygon.out に出力します。

ハミルトン閉路の数を $998244353$ で割った余りを表す整数を、1行に1個出力してください。

入出力例

入力 1

5 1
1 1 2 2

出力 1

2

注記

この例は、問題文中の例とまったく同じです。2つのハミルトン閉路が頂点を通る順序は、それぞれ $(1,2,4,5,3)$ と $(1,2,5,4,3)$ です。

小課題

各テストケースの規模と性質は、以下の表のとおりです。

番号 $n$ $K$ 特殊な性質
$1$ $\le5$ $\le3$ なし
$2$ $\le10$ $\le3$ なし
$3$ $\le15$ $\le3$ なし
$4$ $\le20$ $\le3$ なし
$5$ $\le1000$ $=1$ $A$
$6$ $\le1000$ $=1$ $A$
$7$ $\le1000$ $=1$ $A$
$8$ $\le1000$ $=1$ なし
$9$ $\le1000$ $=1$ なし
$10$ $\le1000$ $=1$ なし
$11$ $\le1000$ $\le2$ $A$
$12$ $\le1000$ $\le2$ $A$
$13$ $\le1000$ $\le2$ $A$
$14$ $\le1000$ $\le2$ なし
$15$ $\le1000$ $\le2$ なし
$16$ $\le1000$ $\le2$ なし
$17$ $\le1000$ $\le3$ $A$
$18$ $\le1000$ $\le3$ $A$
$19$ $\le1000$ $\le3$ なし
$20$ $\le1000$ $\le3$ なし

ここで性質 $A$ は、木のすべての頂点が持つ子の数が高々2つであることを保証します。

すべてのデータについて、$1\le f_i\le i$、$2\le n\le1000$ が保証されます。

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.