题目传送门:洛谷 P5564

题意简述:

有 \(n\) 个点,染 \(m\) 种颜色,第 \(i\) 种颜色染恰好 \(cnt_i\) 个节点,满足 \(cnt_1+cnt_2+\cdots+cnt_m=n\)。

求这 \(n\) 个点组成的本质不同无标号+有序(子树有序)基环(环长至少为 \(2\))树个数。

两棵基环树本质相同当且仅当通过环的旋转(不能翻转)后能使得它们完全相同。

题解:

首先考虑只染一种颜色的 \(n\) 个点(\(n\ge1\))的无标号有根有序树个数计数。
考虑这棵树的括号序,发现其括号序是长度为 \(n\) 的合法括号串,但是必须满足最外层括号(根节点)只有一对。
即 \(n\) 个点的有根有序树个数为 \(n-1\) 对括号组成的合法括号串,即第 \(n-1\) 个卡特兰数。
令 \(n\) 个点的有根有序树个数为 \(t_n\),令其 OGF 为 \(\displaystyle T=\sum_{i=1}^{+\infty}t_ix^i\),即 \(T=xC\),其中 \(C\) 为卡特兰数的 OGF。

再考虑染色的问题,不难发现只要有序,则染色和树形态是相互独立的。
即只要乘上一个多重组合数 \(\displaystyle\binom{n}{cnt_1,cnt_2,\ldots,cnt_m}\) 即可。


回到原问题,枚举环长 \(k\),使用 Burnside 引理统计等价类个数。环的旋转置换的统计方法是常见的,即枚举因数 \(d\),等价于循环 \(d\) 格的置换个数为 \(\varphi\!\left(\dfrac{k}{d}\right)\)。则有:

\[\begin{aligned}\mathbf{Ans}&=\sum_{k=2}^{n}\dfrac{1}{k}\sum_{d|k}\varphi\!\left(\dfrac{k}{d}\right)\!\cdot f(d)\end{aligned}\]

其中 \(f(d)\) 表示循环 \(d\) 格时的不动点个数。

循环 \(d\) 格时,存在 \(d\) 个长度为 \(\dfrac{k}{d}\) 的循环,循环内的每个元素都代表一棵外向树。为了方便进一步的展开,交换 \(d\) 与 \(\dfrac{k}{d}\) 的意义,枚举 \(d\) 为循环长度,而 \(\dfrac{k}{d}\) 为循环个数。此时每个循环内的树形态相互独立,而且染色和树形态相互独立,但每个循环的树形态必须相同,且染色也必须相同,也就是说有 \(\dfrac{k}{d}\) 棵树,且总点数为 \(\dfrac{n}{d}\),并且需要满足每种颜色的个数是 \(d\) 的倍数,即 \(\left.d\:\middle|\:\gcd\limits_{i=1}^{m}cnt_i\right.\)。则公式变为:

\[\begin{aligned}\mathbf{Ans}&=\sum_{k=2}^{n}\dfrac{1}{k}\sum_{d|k}\varphi(d)\cdot f\!\left(\dfrac{k}{d}\right)\!\\&=\sum_{k=2}^{n}\dfrac{1}{k}\sum_{d|k}\varphi(d)\cdot\!\left\{\!\left[d\:\middle|\:\gcd\limits_{i=1}^{m}cnt_i\right]\!\cdot\!\left[x^{n/d}\right]\!T^{k/d}\cdot\binom{n/d}{cnt_1/d,cnt_2/d,\ldots,cnt_m/d}\right\}\!\end{aligned}\]

此时有两条路可走,其一是留下生成函数 \(T\) 的形式不变,其二是考虑使用卡特兰数的性质。

先使用第一种做法,考虑交换求和顺序并改变求和指标 \(k\) 为 \(kd\):

\[\begin{aligned}\mathbf{Ans}&=\sum_{k=2}^{n}\dfrac{1}{k}\sum_{d|k}\varphi(d)\cdot\!\left\{\!\left[d\:\middle|\:\gcd_{i=1}^{m}cnt_i\right]\!\cdot\!\left[x^{n/d}\right]\!T^{k/d}\cdot\binom{n/d}{cnt_1/d,cnt_2/d,\ldots,cnt_m/d}\right\}\!\\&=-t_n\binom{n}{cnt_{1\ldots m}}+\sum_{d\mid\gcd_{i=1}^{m}cnt_i}\varphi(d)\cdot\binom{n/d}{cnt_{1\ldots m}/d}\cdot\!\left[x^{n/d}\right]\!\sum_{k=1}^{n/d}\frac{T^k}{kd}\\&=-t_n\binom{n}{cnt_{1\ldots m}}+\sum_{d\mid\gcd_{i=1}^{m}cnt_i}\frac{\varphi(d)}{d}\cdot\binom{n/d}{cnt_{1\ldots m}/d}\cdot\!\left[x^{n/d}\right]\!\sum_{k=1}^{+\infty}\frac{T^k}{k}\\&=-t_n\binom{n}{cnt_{1\ldots m}}+\sum_{d\mid\gcd_{i=1}^{m}cnt_i}\frac{\varphi(d)}{d}\cdot\binom{n/d}{cnt_{1\ldots m}/d}\cdot\!\left[x^{n/d}\right]\!(-\ln(1-T))\end{aligned}\]

第二行的第一项是因为后面统计了 \(d=k=1\) 的情况,但是实际不需要,所以要减掉。
最后一行利用了 \(\ln\) 在 \(1\) 处展开的的泰勒级数:\(\displaystyle\ln(1-x)=-\sum_{i=1}^{+\infty}\frac{x^i}{i}\)。
先使用多项式对数函数计算出 \(-\ln(1-T)\),按照此式直接计算即可。时间复杂度 \(\mathcal{O}(n\log n+\sigma_0(n)\cdot m)\)。


第二种做法是考虑卡特兰数和自身的 \(m\) 次卷积的第 \(n\) 项的通项。

有公式 \(\displaystyle[x^n]C^m=\binom{2n+m-1}{n}-\binom{2n+m-1}{n-1}\),将此式代入可得:

\[\begin{aligned}\mathbf{Ans}&=\sum_{k=2}^{n}\dfrac{1}{k}\sum_{d|k}\varphi(d)\cdot\!\left\{\!\left[d\:\middle|\:\gcd\limits_{i=1}^{m}cnt_i\right]\!\cdot\!\left[x^{n/d}\right]\!T^{k/d}\cdot\binom{n/d}{cnt_1/d,cnt_2/d,\ldots,cnt_m/d}\right\}\!\\&=\sum_{k=2}^{n}\dfrac{1}{k}\sum_{d|k}\varphi(d)\cdot\!\left\{\!\left[d\:\middle|\:\gcd\limits_{i=1}^{m}cnt_i\right]\!\cdot\!\left(\binom{2n/d-k/d-1}{2n/d-2k/d}-\binom{2n/d-k/d-1}{2n/d-2k/d-1}\right)\!\cdot\binom{n/d}{cnt_{1\ldots m}/d}\right\}\!\\&=-t_n\binom{n}{cnt_{1\ldots m}}+\sum_{d\mid\gcd_{i=1}^{m}cnt_i}\frac{\varphi(d)}{d}\cdot\binom{n/d}{cnt_{1\ldots m}/d}\sum_{k=1}^{n/d}\frac{1}{k}\!\left(\binom{2n/d-k-1}{2n/d-2k}-\binom{2n/d-k-1}{2n/d-2k-1}\right)\!\end{aligned}\]

直接计算即可,复杂度 \(\mathcal{O}(\sigma_0(n)(n+m))\)。

洛谷 P5564: [Celeste-B]Say Goodbye的更多相关文章

  1. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  2. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  3. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  4. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP

    题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...

  5. 洛谷P1710 地铁涨价

    P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交  讨论  题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...

  6. 洛谷P1371 NOI元丹

    P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交  讨论  题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...

  7. 洛谷P1538迎春舞会之数字舞蹈

    题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...

  8. 洛谷八月月赛Round1凄惨记

    个人背景: 上午9:30放学,然后因为学校举办读书工程跟同学去书城选书,中午回来开始打比赛,下午又回老家,中间抽出一点时间调代码,回家已经8:50了 也许是7月月赛时“连蒙带骗”AK的太幸运然而因同学 ...

  9. 洛谷 P1379 八数码难题 Label:判重&&bfs

    特别声明:紫书上抄来的代码,详见P198 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给 ...

随机推荐

  1. c/c++ 混合编程.so

    CC = gccC++ = g++LINK = g++ LIBS = -lz -lm -lpcre#must add -fPIC optionCCFLAGS = $(COMPILER_FLAGS) - ...

  2. Python学习笔记2基本语法规则_20170611

    # 1.print 显示示例 print('Hello, World!') 逗号分割变量,输出插入空格 name = 'BB' print('AA', name) # output: >> ...

  3. CF1010D Mars rover

    CF1010D Mars rover 洛谷评测传送门 题目描述 Natasha travels around Mars in the Mars rover. But suddenly it broke ...

  4. NOIP模拟赛2(two)

    题目描述 Description 很久很久很久以前,方方方造了一台计算机,计算机中开始有一个数 \(0\) .方方方想要让这个数变成 \(a\) ,他打算每次选择一个整数,把计算机中当前的数按位或上这 ...

  5. vue_05项目配置

    目录 vue项目配置: 前端样式结构: settings配置: vue项目路由配置: vue全局js配置: vue全局css配置: 父传子: 父组件 子组件 二.子传父 子组件 父组件 vue项目配置 ...

  6. Note | Python

    目录 PyCharm+远程服务器 预备工作 Pycharm配置 list方法 os imageio Python Image Libarary (PIL) random time PyCharm+远程 ...

  7. 基于Django的Rest Framework框架的频率组件

    0|1一.频率组件的作用 在我们平常浏览网站的时候会发现,一个功能你点击很多次后,系统会让你休息会在点击,这其实就是频率控制,主要作用是限制你在一定时间内提交请求的次数,减少服务器的压力. modle ...

  8. Course: ISA 414

    Assignment #4Course: ISA 414Points:100Due date: November 18th, 2019, before 11:59 pmSubmission instr ...

  9. 关于 NuGet 本地仓库、.NET Core 引用等实战

  10. 关于VS2017离线安装的一点扩充说明

    转自:https://www.cnblogs.com/dunitian/p/8051985.html 其实逆天不推荐自己慢慢离线,找个离线包更新下再打包更快 Key:http://www.cnblog ...