首页 > 其他分享 >[ARC171B] Chmax

[ARC171B] Chmax

时间:2024-02-05 10:36:30浏览次数:29  
标签:ARC171B limits 线段 端点 aligned Chmax

[ARC171B] Chmax

Solution

首先可以发现相同 \(a_{i}\) 的元素可以形成一条链。

问题很容易转化为:给定若干线段 \([l_{i}, r_{i}]\),要求 \(i\) 能连向 \(j\) 当且仅当 \(l_{j} < r_{i}\),求生成环集的数量。

容易发现两个点之间至少有一条边,当且仅当两线段不交时,左侧线段无法连向右侧线段。

感觉直接莽不舒服,转成补图就舒服多了。

超集反演。记 \(U\) 表示补图边全集,\(w(S)\) 表示生成图边集 \(\cap U = S\) 的方案数,\(W(S)\) 表示生成图边集 \(\cap U \supseteq S\) 的方案数。显然有 \(W(S) = \sum\limits_{S \subseteq T}w(T) \iff w(S) = \sum\limits_{S \subseteq T}(-1)^{|T| - |S|}W(T)\)。于是答案为:

\[\begin{aligned} w(\emptyset) = \sum\limits_{S}(-1)^{|S|}W(S) \\ \end{aligned} \]

\(W(S)\) 可以 DP 求出。将线段按左端点排序并依次编号(以下直接称线段为点了),记 \(f_{i, j}\) 表示考虑前 \(i\) 个点,共连了 \(j\) 条不合法边的方案数。现在考虑 \(f_{i - 1} \to f_{i}\) 的转移,假设当前点 \(i\) 的入度为 \(c\),则:

\[\begin{aligned} f_{i, j} &\leftarrow f_{i - 1, j} \\ f_{i, j + 1} &\leftarrow (c - j)f_{i - 1, j} \\ \end{aligned} \]

正确性在于:如果 \(i \to j\),\(k > j\),则 \(i \to k\)。

此做法其实是将原问题形式化成了该问题:给定一个非负不降整数序列 \(a_{1}, \dots, a_{n}\)(即入度序列),对 \(i = 1, \dots, n\) 求选取 \(i\) 个元素的带权方案数,权值定义为 \(\prod\limits_{j = 0}^{i - 1}(c_{j} - j)\),其中 \(c\) 序列是你选取的数。这个我还不会更优复杂度。code ARC171B - \(O(n^{2})\)


回到第二步:|考虑给每个右端点匹配一个左端点,如果一个位置是左端点则 ++cnt,如果一个位置是右端点则 ans *= cnt, --cnt

标签:ARC171B,limits,线段,端点,aligned,Chmax
From: https://www.cnblogs.com/Schucking-Sattin/p/18007485

相关文章

  • 题解 AGC058B 【Adjacent Chmax】
    postedon2022-08-1500:08:56|under题解|sourceproblem一个长为\(n\)的排列\(P\),每次可以选择一个\(i\),令\(v=\max(P_i,P_{i+1})\),使\(P_i=P_{i+1}=v\),求若干次操作后有多少种不同的序列。\(1\leqn\leq5000\)。solution显然地,对于一个\(P_i\),它要么被完全覆盖......