2025.4.9 鲜花

浅谈 DAG 计数

光るなら
雨上がりの虹も
【a me a ga ri no ni ji mo】
【雨过天晴出现的彩虹】
凛と咲いた花も
【rin to sa i ta ha na mo】
【以及凛然绽放的花朵】
色付き溢れ出す
【i ro zu(du) ki a fu re da su】
【都绽放出美丽的色彩】
茜色の空 仰ぐ君に あの日恋に落ちた
【a ka ne i ro no so ra a o gu ki mi ni a no hi ko i ni o chi ta】
【仰望着深红色的天空的你那天我陷入了对你的迷恋】
瞬间のドラマチック
【shyun kan no do ra ma chi kku】
【如同戏剧性的一瞬间】
フイルムの中の一こまも 消えないよ 心に刻むから
【fu i ru mu no na ka no hi to ko ma mo ki e na i yo ko ko ro ni ki za mu ka ra】
【却如电影那样回放着 每个画面都铭刻在我心里不会消失】
君だよ 君なんだよ
【ki mi da yo ki mi nan da yo】
【是你哦 就是你哦】
教えてくれた
【o shi e te ku re ta】
【告诉了我】
暗闇も光るなら星空になる
【ku ra ya mi mo hi ka ru na ra ho shi zo ra ni na ru】
【在黑暗中发光的话 就能成为星空】
悲しみを笑颜にもう隠さないで
【ka na shi mi wo e ga o ni mo u ka ku sa na i de】
【悲伤也被笑容掩盖 已不用再隐藏起来】
煌めくどんな星も君を照らすから
【ki ra me ku don na ho shi mo ki mi wo te ra su ka ra】
【漫天闪耀的繁星都会照亮你前行】
眠りも忘れて迎えた朝日が
【ne mu ri mo wa su re te mu ka e ta a sa hi ga】
【忘记入睡的一夜迎来了晨光】
やたらと突き刺さる
【ya ta ra to tsu ki sa sa ru】
【将我失眠的双眼刺伤】
低気圧运ぶ 头痛だって
【te i ki a tsu ha ko bu zu tsu u da tte】
【沉闷与压抑 令人头痛心烦】
忘れる 君に会えば
【u su re ru ki mi ni a e ba】
【但若遇见你 就会烟消云散】
静寂はロマンチック
【se i jya ku wa ro man chi kku】
【寂静无声的浪漫气氛】
红茶に溶けたシュガーのように
【kou chya ni to ke ta shyu gaa no you ni】
【像溶入红茶的方糖一样】
全身に巡るよ 君の声
【zen shin ni me gu ru yo ki mi no ko e】
【环绕全身 仿佛听到了你的声音】
君だよ 君なんだよ
【ki mi da yo ki mi nan da yo】
【是你哦 就是你哦】
笑颜をくれた
【e ga o wo ku re ta】
【给了我灿烂的笑容】
涙も光るなら 流星になる
【na mi da mo hi ka ru na ra ryuu se i ni na ru】
【泪水若能绽放光芒 流星般闪耀】
伤ついたその手を もう离さないで
【ki zu tsu i ta so no te wo mou ha na sa na i de】
【那受伤过了的手 已经不会再次放开】
愿いを込めた空に
【ne ga i wo ko me ta so ra ni】
【在充满愿望的天空下】
明日が来るから
【a shi ta ga ku ru ka ra】
【明天一定会来到】
导いてくれた光は 君だよ
【mi chi bi i te ku re ta hi ka ri wa ki mi da yo】
【指引引导着我的那道光 是你哟】
つられて仆も走り出した
【tsu ra re te bo ku mo ha shi ri da shi ta】
【我也被带动着开始迈出了步伐】
知らぬ间にクロスし始めた
【shi ra nu ma ni ku ro su shii ha ji me ta】
【不知和不觉 彼此间开始交汇】
ほら今だ ここで光るなら
【ho ra i ma da ko ko de hi ka ru na ra】
【对就是现在 在这里若能绽放光芒】
君だよ 君なんだよ
【ki mi da yo ki mi nan da yo】
【是你哦 就是你哦】
教えてくれた
【o shi e te ku re ta】
【告诉了我】
暗闇は终わるから
【ku ra ya mi wa o wa ru ka ra】
【懂得黑暗终将逝去】
君だよ 君なんだよ
【ki mi da yo ki mi nan da yo】
【是你哦 就是你哦】
教えてくれた
【o shi e te ku re ta】
【告诉了我】
暗闇も光るなら 星空になる
【ku ra ya mi mo hi ka ru na ra ho shi zo ra ni na ru】
【在黑暗中发光的话 就能成为星空】
悲しみも笑颜に もう隠さないで
【ka na shi mi mo e ga o ni mou ka ku sa na i de】
【悲伤也被笑容掩盖 已不用再隐藏起来】
煌めくどんな星も君を照らすから
【ki ra me ku don na ho shi mo ki mi wo te ra su ka ra】
【漫天闪耀的繁星都会照亮你前行】
答えはいつでも偶然必然
【ko ta e wa i tsu de mo guu zen hi tsu zen】
【答案都总是 偶然的必然的】
いつか选んだ道こそ运命になる
【i tsu ka e ran da mi chi ko so un mei ni na ru】
【总有天会知道自己选的道路才是自己该行的命运之路】
握り缔めた その希望も不安も
【ni gi ri shi me ta so no ki bou mo fu an mo】
【手中紧握着的那份希望以及不安】
きっと二人を动かす 光になるから
【ki tto fu ta ri wo u go ka su hi ka ri ni na ru ka ra】
【一定会成为照耀两人前行的光芒】

我不会 EGF,所以不写和 EGF 有关的部分。

首先看一道板子:

n 个点的有向完全图,求删掉一些边变成 DAG 的方案数,\(n \le 5e3\)

考虑每次去掉零度点进行 dp,即设 \(dp_i\) 表示还 \(i\) 个点的方案数,枚举去掉的零度点个数转移。

轻松算重,所以我们施以二项式反演,设当前转移 \(m\) 个点,设 \(f_m(i)\) 表示恰好 \(i\) 个零度点,\(g_m(x) = \sum\limits_{i = x}^m \dbinom ix f(i)\),实际意义是至少。

\(E(X, Y)\) 表示 \(X\)\(Y\) 连边的方案数,因为这是完全图,设 \(E(|X|, |Y|) = E(X, Y) = |X||Y|\),有:

\[g_m(x) = \dbinom mx dp_{m - x} 2 ^ {E(x, m - x)} \]

\[f_m(x) = \sum_{i = x} ^ m \dbinom ix (-1) ^ {i - x} g(i) \]

则:

\[\begin{aligned} dp_m &= \sum_{i = 1} ^ m f(i) \\ &= \sum_{i = 1} ^ m \sum_{j = i} ^ m \dbinom ji (-1) ^ {j - i} \dbinom mj dp_{m - j} 2 ^ {E(j, m - j)} \\ &= \sum_{j = 1} ^ m \dbinom mj dp_{m - j} 2 ^ {E(j, m - j)} \sum_{i = 1}^{j} \dbinom ji (-1) ^ {j - i} \\ &= \sum_{j = 1} ^ m \dbinom mj dp_{m - j} 2 ^ {E(j, m - j)} (-(-1) ^ j \dbinom j0 + (1 - 1) ^ j) \\ &= \sum_{j = 1} ^ m \dbinom mj dp_{m - j} 2 ^ {E(j, m - j)} (-1) ^ {j + 1} \end{aligned}\]

于是就是 \(n ^ 2\) 做。

然后看些扩展的:

[ABC306Ex] Balance Scale

转化题面,若没有 \(=\) 就是给一个无向图定向求 DAG 数,直接贺上一个题的式子有:

\[dp_S = \sum\limits_{T\subseteq S, T \not= \varnothing} [E(T, T) = 0] dp_{S / T} (-1) ^ {|T| + 1} \]

考虑到边不能不选,所以也不存在选边的系数 \(2^E\)

考虑加上等号,则相当于可以缩点,设 \(sz_S\) 表示 \(S\) 集合内连通块数,有:

\[dp_S = \sum\limits_{T\subseteq S, T \not= \varnothing} dp_{S / T} (-1) ^ {sz_T + 1} \]

[清华集训 2014] 主旋律

考虑将强连通分量缩完点以后是个 DAG,而只有一个强连通分量不好做,单步容斥。

\(dp_S\) 表示集合 \(S\) 删成一个强连通分量的方案数,\(f_{S, k}\) 表示将 \(S\) 缩成 \(k\) 个相互独立的强连通分量的方案数,有:

\[dp_S = 2 ^ {E(S, S)} - \sum\limits_{T \subseteq S, T \not= \varnothing} dp_{S / T} 2 ^ {E(T, S / T)} \sum\limits_{k = 1 + [T = S]} ^ {|T|} f_{T, k} (-1) ^ {k + 1} \]

\[f_{S, k} = \sum\limits_{T \subseteq S, \min\{S\} \in T} [E(T, S / T) = 0] dp_{T} f_{S / T, k - 1} \]

为了防止算重,我们钦定 \(min\{S\}\)\(S\) 中的最小元一定放在第一个集合中。

其实这样已经 \(n3 ^ n\),不知道题解写 \(n3 ^ n\) 为啥都要去掉 \(k\),难道是为了卡常?

考虑优化,发现 \(f_{S, k}\) 中的 \(k\) 的意义就是贡献 \(-1\) 的系数,不妨设 \(g_S = \sum\limits_{k = 1 + [T = S]} ^ {|T|} f_{T, k} (-1) ^ {k + 1}\),则:

\[g_S = -\sum_{T \subseteq S, \min\{S\} \in T} [E(T, S / T) = 0] dp_{T} g_{S / T} \]

唯一要注意的就是 \(dp\) 转移时 \(S = T\) 的特判。

预处理出 \(E(S, S)\),对于 \(E(T, S / T)\) 单步容斥成 \(E(T, S) - E(T, T)\),枚举子集时每次 \(E(T, S)\) 只更新和上次不一样的地方,均摊下来就不在上限上了。

总复杂度 \(\mathcal{O}(3 ^ n)\)

[省选联考 2024] 重塑时光

考虑统计方案,也就是统计将 \(\{1, \dots, n\}\) 划分成 \(k + 1\) 个点集,能使其每个点集都是一个合法的拓扑序,所有点集缩成的大点组成一个 \(DAG\)

\(f_{S, i}\) 表示将 \(S\) 划分成 \(i\) 个大点的方案数,\(g_{S, i}\) 表示划分为 \(i\) 个独立大点,\(h_{S}\) 表示 \(S\) 合法的拓扑数。

\[f_{S, i} = \sum_{T \subseteq S} [E(T, S / T) = 0] \sum_{j = 1} ^ i f_{S / T, i - j} g_{T, j} (-1) ^ {j + 1} \]

\[g_{S, i} = \sum_{T \subseteq S, \min\{S\} \in T} [E(T, S / T) = 0, E(S / T, T) = 0] g_{S / T, i - 1} h_T \]

\[h_S = \sum_{s \in S} [E(S / s, s) = 0]h_{S / s} \]

然后就是 \(n^2 3 ^ n\),据 JJDW 说已经能过了。

发现 \(g, h\) 可以 \(n 3 ^ n\)

\(f_{S, i}\) 写成多项式 \([x^i]F_S\)\(G_S\) 同理,转移方程:

\[F_S=\sum_{T \subseteq S} [E(T, S / T)] F_{S / T} G_T \]

这是一个卷积,所以 \(F\) 是个 \(n\) 次多项式,我们往里插 \(n + 1\) 个点值即可,单次复杂度是 \(\mathcal{O}(3 ^ n)\),总复杂度 \(\mathcal{O}(n 3 ^ n)\)

P

posted @ 2025-04-09 09:58  xrlong  阅读(147)  评论(9)    收藏  举报

Loading