Official

Ex - Hakata Editorial by sugarrr


\(N\) を回文の種類数とすると、実は \(N\leq |S|\) が成り立ちます。
なぜなら、ある文字列の末尾に \(1\) 文字追加した時に、回文が \(2\) 種類増えることはないからです。

それぞれの回文を頂点に対応させ、一方が他方の部分文字列である場合に有向辺を張ります。
すると、問題は次のようになります。

\(N\) 頂点の DAG が与えられ、いくつかの頂点を選ぶ。
ただし、頂点間にパスが存在するような \(2\) 頂点を選ぶことはできない。
最大でいくつの頂点を選べるか?

このグラフでは、\(i\rightarrow j, j \rightarrow k\) の辺がある時に必ず \(i\rightarrow k\) の辺もあることから、Dilworth の定理より問題が次のように変換されます。

\(N\) 頂点の DAG が与えられる。最小パス被覆は何本か?

これは、左右 \(N\) 頂点ずつ用意した二部グラフにおいて、元のグラフで \(i \rightarrow j\) に辺がある時に左の頂点 \(i\) から右の頂点 \(j\) に辺を貼ったグラフにおける最大マッチング問題を解けば良いです。

以上でこの問題を解くことができました。

posted:
last update: