特化析合树计数相关——2025.7.1 鲜花
特化析合树计数相关
好
これでいいなのだ 好好好
好きの需要と供給の寒暖差 また風邪っぴきさん
忍ぶ修行は効率が肝心だとか わかってるもん
でも簡単じゃない ねえ簡単じゃないの
心の乙女があれこれ言っちゃうの
くぅ問題が大 ねえ頑張ってドクター 感情が爆散
頭あちちな 好好好のラブ連単
きみとしたいことがいっぱい
いつも「足んないな」ってなる問題
欲張り星人のせいなんです
もう 嫌い 大嫌いとか思ってみたい
でも好好好のラブ連単 “愛したほうが勝ち”なんだって
これでいいなのだ 好好好
ところがローな脳がお目覚めだ
BAD駄々っ子 ぱーりない
もうだめだ 誰にでも嫉妬しちゃって胸が取れそう
最高セット こっちむいて
最低セット あっちむいて
感情は日替わり へい、テンションチャンプルー
また押すっきゃない ねえ押すっきゃないの
あたしが重すぎて揺れない恋シーソー
くぅ問題が大 ねえ頑張ってドクター 残念が爆誕
頭あちちな 好好好のラブ連単
気持ち抑え込んで一旦
きみが「足んないな」ってなるような
大人バランスがいいんだって
忙しいだなんて うっそー
ごめん寝てたなんて うっそー
迷走しちゃうあたし 安らかに死ねばいいのに
好好好のラブ連単 これでいいのかな
頭あちちな 好好好のラブ連単
きみのしたいこともちょうだい
刺激バッキュンビーム撃ち放題
欲張り星人になっちゃえよ
大嫌い 超嫌いとか思っちゃうの?
やだ 好好好のラブ連単 愛されちゃうの欲しがっています
へっちゃらピーポー イタさも逆におっけー
はっちゃけピーポー ダサさも逆におっけー
ぶっちゃけピーポー ウザさも逆におっけー
言ったらいいじゃん せーので好好好
へっちゃらピーポー イタさも逆におっけー
はっちゃけピーポー ダサさも逆におっけー
ぶっちゃけピーポー ウザさも逆におっけー
言ったらいいじゃん せーので好好好
これでいいなのだ 好好好
这样就好啦 好好好
喜欢的需求和供应的温度差 又要开始感冒啦
忍者修行最重要的是效率什么的 我当然知道啦
但是一点都不简单 一点都不简单的啦
内心的乙女又要有一堆话啦
ku~ 问题一大堆 呐加油吧医生 感情在爆炸
令人头疼的 好好好的爱的连胜
有很多想和你一起做的事
总是“不够”的问题
都是贪婪星人的错
够啦 讨厌 最讨厌什么的试一下嘛
可是好好好的爱的连胜 “爱上了就是胜利”的说嘛
这样就好啦 好好好
可是低迷的脑子清醒了
坏脾气的孩子无法开派对
忍不下去了 对谁都感到嫉妒仿佛心脏要跳出来
最高配置 看向这边
最低配置 看向远方
感情是日更的 情感大杂烩
还是只有继续推 呐只能继续推的好嘛
恋爱的跷跷板因我太重而纹丝不动
ku~ 问题一大堆 呐加油吧医生 可惜在爆炸
令人头疼的 好好好的爱的连胜
先抑制一下自己的感情
果然就会觉得你“不够”
大人的平衡是好的一说
现在很忙啦什么的 骗你的啦
抱歉刚才在睡觉什么的 骗你的啦
开始迷路的我 安静地死掉就好啦
好好好的爱的连胜 这样就好了吗?
令人头疼的 好好好的爱的连胜
把你想做的也交给我吧
刺激暴击光束随便放
变成贪婪星人吧
最讨厌 超级讨厌什么的会这么觉得吗?
不要嘛 好好好的爱的连胜 就是想要被你爱上的好嘛
简单的说 中二什么的也可以哦
放开的说 出丑什么的也可以哦
大概的说 烦人什么的也可以哦
说出来就好啦 大家一起好好好
简单的说 中二什么的也可以哦放开的说
出丑什么的也可以哦大概的说
烦人什么的也可以哦
说出来就好啦 大家一起好好好
这样就好啦 好好好
可以先看:link,应该不算是前置,不看对理解也没有阻碍,只是这里是对照着说的。
这里依然只讲析合树的计数相关部分(虽然我还没找到用这种析合树建树做的题)。
注意和朴素析合树的定义区分一下。
设排列是 \(P\)。
定义连续段是 \([l, r] \text{ s.t.} \max_{i\in [l, r]} P_i = r \land \min_{i\in [l, r]} P_i = l\)。
容易发现连续段不可能严格相交(即不算包含),但这里一个点不一定是连续段。
依然建出树形结构,这里的若一个叶子不是连续段则称其是非法叶子(注意非法叶子事实上是合法存在的叶子)。
依然定义合点是一个点满足其任意一个非平凡连续儿子(即长度不为 \(1\) 且不是全部)都是连续段。
定义析点是不是合点的点。
这里为了性质叙述的方便,我们定义只有两个儿子且不存在非法叶子的点是合点,但存在非法叶子的点和叶子节点是析点。
类似的性质依然成立:析点满足其任意一个非平凡连续儿子(即长度不为 \(1\) 且不是全部)都不是连续段。
证明类似,考虑到其若有非平凡连续儿子形成连续段则可以将这些儿子缩成一个合点。
我们这里没定义儿子序列,因为我们有更好的性质刻画。
合点有性质:其所有儿子都是析点。
证明:若其有儿子是合点,则其合点儿子的一段儿子前缀或后缀一定可以和其他点组成新的连续段,这样就相交了。
析点有性质:其儿子可以是析点或合点,但其任意两个非非法叶子儿子之间都一定有一个非法叶子,且开头结尾一定是非法叶子。
证明:若其有两个非非法叶子儿子之间没有一个非法叶子,则其可以合并,若开头不是非法叶子,则其除了开头节点以外的点可以合并。
以上证明有一些边界情况的分讨,但根据定义可以直接推出,读者自证不难。
依然考虑计数(以下部分涉嫌口胡,我没找到题目能验证其正确性):
考虑求一个长为 \(l\) 的合点方案数:
这个很简单,我们直接枚举第一个儿子,用类似朴素析合树的做法,即枚举其第一个儿子的长度 \(k\),于是我们要找一个长为 \(k\) 的排列且其任意前缀都不是连续段,设其数量是 \(g_k\),显然有单步容斥递推式:
可以 \(n\log n\) 甚至 \(\frac {n\log^2 n}{\log\log n}\) 甚至 \(n \log^2 n\) 甚至 \(n ^ 2\) 求出。
所以最后答案是 \(\sum_{i = 1}^{n - 1}g_i(n - i)!\) 这里就没有乘 \(2\) 这一说了。
考虑求长为 \(l\) 的析点方案数,我们依然可以容斥一下,直接用总的减去合点,但这里我们给出一个更易扩展的做法:
我们发现合法叶子可以代替儿子序列天然分割,于是我们设 \(f_{i, c}\) 表示长为 \(i\),有 \(c\) 个合法叶子的方案数。
直接转移是不难的:\(f_{i, c} = \sum_{k < i} f_{k, c - 1}\),难点在求合法叶子的方案数,即求一个长为 \(k\) 排列满足其没有任意一个非平凡连续段的方案数 \(a_k\)。
虽然连续段的定义看似更严了,但这个事实上有十分优雅的做法:
我们依然是考虑析合树,考虑依次插入每个点,考虑插入地 \(n\) 个点的方案数。
首先可以证明插入前一定是一个析点且至多有一个合法点:
-
若没有合法点:此时其是一个长为 \(n - 1\),此时我们可以将新点插入任意一个置换环中,方案数是 \((n - 1)a_{n - 1}\)。
-
若其有合法点:我们枚举其合法点长度 \(l\),考虑其最靠左能取到 \([2, l + 1]\),最靠右则是 \([n - l - 1, n - 2]\),共计 \(n - l - 2\) 种取法。要求插入后没有连续段,也就是插入后 \(n\) 前的连续段都超过 \(n\),在逆排列上考虑,其相当于是求长 \(l + 1\) 且只有 \([1, l + 1]\) 是连续段的方案数,是 \(a_{l + 1}\),剩下的 \(n - 1 - l\) 有 \(a_{n - 1 - l}\) 种填法。
简单化简一下,总方案数是:
于是怎么做都行了,可以 \(n\log n\) 甚至 \(\frac {n\log^2 n}{\log\log n}\) 甚至 \(n \log^2 n\) 甚至 \(n ^ 2\)(甚至比朴素的好求)。
其实这是经典问题:SIF 排列计数,可以直接看论文(虽然写的好像很迷惑)。
可以做一下:Jellyfish and OEIS。
P
本文来自博客园,作者:xrlong,转载请注明原文链接:https://www.cnblogs.com/xrlong/p/18960364
版权声明:本作品采用 「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0) 进行许可。