公式

G - Net of Net 解説 by DEGwer


\(P\) の展開図は、\(P\) をグラフとして見たときの全域木 \(T\) の辺に沿って \(P\) を切り開いてできるものです。よって、展開図の展開図がパスであることは、展開図に Euler 路が存在することと同値です。より正確には、\(P\) の各頂点 \(v\) に対し、それに接続する \(P\) の辺を順に \(e_1,...,e_k\) とし、その中の \(T\) の辺を \(e_{i_1},...,e_{i_l}\) としたとき、\(e_{i_{j+1}}-e_{i_j}\) が高々二か所を除いて奇数であることです。

そのような全域木の最大重みを求めるには、Steiner tree の要領で \(T\) を求めていく DP をすればよいです。具体的には、\(DP[X][v][l][r][d]\) で、頂点集合 \(X\) に対する \(v\) を根とする全域木であって、\(v\) から出る辺のうち \(l\) 番目から \(r\) 番目の間の辺を使うかどうかが未定であり、 \(e_{i,j+1}-e_{i,j}\) が奇数である場所が \(d\) 個であるようなものの最大重み、とすればよいです。 計算量は \(O(3^n poly(n))\) です。

なお、\(N\) が小さいので、与えられた点たちの凸包は「与えられたすべての三点に対し、ほかのすべての点がその片側に存在するかどうかを判定する」などのアルゴリズムで簡単に求めることができます。

投稿日時:
最終更新: