D - Unique Matching 解説 by evima
明らかに、区間 \([l_i,r_i]\) たちは相異なります。よって、単に \(x_i=i\) として最後に答えを \(n!\) 倍します。
二部グラフマッチングの唯一性を考えます。完全マッチングを固定すると、これは増加パスが存在しないことと同値です。
\(l,r\) が良いことの必要十分条件は、\(1\le i<j\le n,r_i\ge j,l_j\le i\) であるような \(i,j\) がないことといえます。これは、長さ \(2\) のサイクルがないことを意味します。さらに、この条件下でサイクルが存在しないことも証明できます。
\(l\) を \(r\) に対する制約として見ます。すべての \(l_i\le j<i\) に対して \(r_j<i\) が成立しなければなりません。
\(a_i=\min\limits_{l_j\le i<j}j\) とします(\(j\) が存在しなければ \(a_i=n+1\))。計算したいものはありうるすべての \(l\) にわたる \(\prod (a_i-i)\) の総和です。
\(a\) を固定し、\(a\) を生成する \(l\) の個数を考えます。
主な考えは、\(a\) のすべての極大値を考慮し、\(a\) をいくつかの独立な部分に分けるというものです。
\(f_{i,j}\) を、\(a_i, \dots, a_j\le j+1\) がすべて成り立つとして、\(l_{j+1}\) が確定している (\(l_{j+1}<i\)) ときの \([i,j]\) のみを考慮した際の答えとします。同様に、\(l_{j+1}\) が未確定 (\(l_{j+1}\ge i\)) のときの答えを \(g_{i,j}\) とします。特に、\(f_{i+1,i}=g_{i+1,i}=1\) です。
最終的な答えは \(f_{1,n}\) です。
\(i\le k\le j\) かつ \(a_k=j+1\) であるような最小の \(k\) をとります(明らかに \(a_j=j+1\) であり、そのような \(k\) は存在します)。すると、\([i,k-1]\) と \([k+1,j]\) は独立な部分問題です。よって、以下が成り立ちます。
\[ f_{i,j}=\sum\limits_{i\le k\le j}(j-k+1)g_{i,k-1}f_{k+1,j}\\ g_{i,j}=\sum\limits_{i\le k\le j}(k-i+1)(j-k+1)g_{i,k-1}f_{k+1,j} \]
さらに、\(f_{i,j}\) は \(j-i+1\) のみに関係するため、以下のように書き直せます。
\[ f_i=\sum\limits_{1\le j\le i}(i-j+1)g_{j-1}f_{i-j}\\ g_i=\sum\limits_{1\le j\le i}j(i-j+1)g_{j-1}f_{i-j} \]
これらをすべて愚直に計算しても \(O(n^2)\) 時間で済み、間に合います。分割統治 & FFT を用いれば \(O(n\log^2 n)\) 時間となります。
投稿日時:
最終更新: