ardririyの足跡

ABC394E - Palindromic Shortest Path

ABC394E - Palindromic Shortest Path

問題

問題リンク

NN頂点の有向グラフがあり、頂点iiからjjの向きに文字Ci,jC_{i, j}のラベルが付いた辺がある。ただし、Ci,jC_{i, j}-のときは辺がない。全ての(i,j)(i, j)の組に対して、以下の問いに答えよ。

頂点iiから頂点jjへのパスであって、ラベルを通った順に読んだときにそれが回文となるようなパスのうち、最も短い長さがなにかを求めよ。

考察

重要な考察として、回文の先頭と末尾に同じ文字を加えた文字列はまた回文となる、というものがある1。また、空文字列と文字1文字からなる文字列は回文である。

これを用いて、「すでに構築済みの回文の最短経路から左右に1文字ずつ同じ文字を伸ばすことによって回文を生成していく」ということを考えたい。これは、頂点iiから頂点jjへのパスが最短となる回文の長さ(これをDi,jD_{i, j}とする)が既知であるとして、(Dx,yD_{x, y}が未知であるような)頂点の組x,yx, yで「頂点xxから頂点iiへ向かう辺のラベル」と「頂点yyから頂点jjへ向かう辺のラベル」が同じ場合はDx,y=Di,j+2D_{x, y} = D_{i, j}+2と表すことができる。これは、先に述べた「回文の先頭と末尾に同じ文字を加えた文字列はまた回文である」を用いている。

以上を用いると、問題は以下のように言い換えることができる。

N2N^2頂点からなるグラフと表CCが与えられる。頂点(i,j)(i, j)と頂点(x,y)(x, y)の間には2Cx,i=Cj,yC_{x, i} = C_{j, y}であるとき、またその場合に限り重み2の有向辺が貼られている。 ここで、頂点(i,i)(i, i)の距離は0で、またCi,jC_{i, j}-ではないような頂点(i,j)(i, j)への距離は1である。全ての頂点への最短距離を求めよ。

解法

一般的な最短経路問題に帰着されたので、Dijkstra法か、あるいはキューに追加する順に注意をしてBFSをすることにより求めることができる。

提出

Footnotes

  1. 言われれば当然と言えば当然

  2. 2つ組で1頂点であることに注意