@description@

一棵 k-超级树(k-SuperTree) 可按如下方法得到:取一棵深度为 k 的满二叉树,对每个节点向它的所有祖先连边(如果这条边不存在的话)。

例如,下面是一个 4-超级树:

请统计一棵 k-超级树 中有多少条不同的简单有向路径,对 mod 取模。

input

一行两整数 k, mod。

output

一行一整数表示答案。

example

input1: 2 100

output1: 9

input2: 3 1000

output2: 245

input3: 20 998244353

output3: 450500168

explain

第一个样例的 9 条路径如下:

1, 2, 3, 1->2, 2->1, 1->3, 3->1, 2->1->3, 3->1->2。

@solution@

神仙树。

你问我为什么 3/27 要写 3/16 的模拟赛题解?

因为我热爱文化课。

题解就少说点,我要去准备月考了。

对于某一条路径:

要么它完全在左右某一棵子树中,可以转换为子问题;

要么它肯定经过根节点,这种情况再分成几类:

(1)只包含根节点。easy。

(2)以根节点作为终点/起点。easy。

(3)从左子树/右子树到另一颗子树。easy。

(4)从左子树/右子树回到这棵子树。……

好像第 4 类不可做的样子。我们需要求解一棵子树含有两条不相交路径的方案数。

既然如此,就再加一维状态。定义 dp(i, j) 表示深度为 i 的超级树选出 j 条不相交路径的方案数。

因为增加一个根节点最多只会将两条路径合并,即总路径数减一,故 j ≤ k。

然后就是非常简单的 O(n^3) 的 dp 题了。

最后答案为 dp(k, 1)。

@accepted code@

#include<cstdio>
const int MAXN = 500 + 5;
int dp[MAXN][MAXN], k, mod;
inline int add(int a, int b) {return (a + b) % mod;}
inline int mul(int a, int b) {return 1LL * a * b % mod;}
int main() {
scanf("%d%d", &k, &mod); dp[0][0] = 1;
for(int i=1;i<=k;i++)
for(int p=0;p<=k;p++) {
if( dp[i - 1][p] == 0 ) continue;
for(int q=0;q<=k;q++) {
if( dp[i - 1][q] == 0 ) continue;
int x = mul(dp[i - 1][p], dp[i - 1][q]);
dp[i][p + q] = add(dp[i][p + q], mul(x, add(1, mul(2, add(p, q)))));
dp[i][p + q - 1] = add(dp[i][p + q - 1], mul(x, add(mul(2, mul(p, q)), add(mul(p, p - 1), mul(q, q - 1)))));
dp[i][p + q + 1] = add(dp[i][p + q + 1], x);
}
}
printf("%d\n", dp[k][1]);
}//本地卡常,还没卡过。因此仅供参考。

@details@

暴力加一维状态的神仙操作。

写到一半我突然明白为什么要求是有向的路径……路径数变为原先的两倍,就不用求 2 的逆元。

出题人真懒。

@省选模拟赛03/16 - T3@ 超级树的更多相关文章

  1. 4.9 省选模拟赛 划分序列 二分 结论 树状数组优化dp

    显然发现可以二分. 对于n<=100暴力dp f[i][j]表示前i个数分成j段对于当前的答案是否可行. 可以发现这个dp是可以被优化的 sum[i]-sum[j]<=mid sum[i] ...

  2. 5.29 省选模拟赛 波波老师 SAM 线段树 单调队列 并查集

    LINK:波波老师 LINK:同bzoj 1396 识别子串 不过前者要求线性做法 后者可以log过.实际上前者也被我一个log给水过了. 其实不算很水 我自认跑的很快罢了. 都是求经过一个位置的最短 ...

  3. 4.24 省选模拟赛 欧珀瑞特 主席树 可持久化trie树

    很容易的一道题目.大概.不过我空间计算失误MLE了 我草草的计算了一下没想到GG了. 关键的是 我学了一个dalao的空间回收的方法 但是弄巧成拙了. 题目没有明确指出 在任意时刻数组长度为有限制什么 ...

  4. 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解

    今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...

  5. [NOIP2018模拟赛10.16]手残报告

    [NOIP2018模拟赛10.16]手残报告 闲扯 炉石乱斗模式美滋滋啊,又颓到好晚... 上来T2先敲了树剖,看T1发现是个思博DP,然后没过大样例,写个暴力发现还是没过大样例!?才发现理解错题意了 ...

  6. 3.28 省选模拟赛 染色 LCT+线段树

    发现和SDOI2017树点涂色差不多 但是当时这道题模拟赛的时候不会写 赛后也没及时订正 所以这场模拟赛的这道题虽然秒想到了LCT和线段树但是最终还是只是打了暴力. 痛定思痛 还是要把这道题给补了. ...

  7. 4.26 省选模拟赛 T3 状压dp 差分求答案

    LINK:T3 比较好的题目 考试的时候被毒瘤的T2给搞的心态爆炸 这道题连正解的思路都没有想到. 一看到题求删除点的最少个 可以使得不连通. 瞬间想到最小割 发现对于10分直接跑最小割即可. 不过想 ...

  8. [luogu#2019/03/10模拟赛][LnOI2019]长脖子鹿省选模拟赛赛后总结

    t1-快速多项式变换(FPT) 题解 看到这个\(f(x)=a_0+a_1x+a_2x^2+a_3x^3+ \cdots + a_nx^n\)式子,我们会想到我们学习进制转换中学到的,那么我们就只需要 ...

  9. [noi.ac省选模拟赛]第12场题解集合

    题目 比赛界面. T1 数据范围明示直接\(O(n^2)\)计算,问题就在如何快速计算. 树上路径统计通常会用到差分方法.这里有两棵树,因此我们可以做"差分套差分",在 A 树上对 ...

随机推荐

  1. 使用session实现一次性验证码

    在登录页面和各种页面,会看到有验证码输入,这样做的目的是为了防止密码猜测工具破解密码,保护了用户密码安全,验证码只能使用一次,这样就给密码猜测工具带来了很大的困难,基本上阻断了密码猜测工具的使用. 可 ...

  2. Struts_改写客户列表练习

    1.CustomerAction修改放入ActionContext 2.list.jsp使用struts标签库

  3. 禁用/移除WordPress页面的评论功能

    对于某些类型的WordPress站点,也许不需要在页面(page)提供评论功能,那么你可以通过下面的方法,很容易就禁用或移除WordPress页面的评论功能. 方法1:在页面编辑界面取消该页面的评论功 ...

  4. tp5.1 本地正常, 线上route.php不起作用的问题

    由于本项目 的.htaccess文件是放在根目录的, 上传没有覆盖,重新编辑 <IfModule mod_rewrite.c> Options +FollowSymlinks -Multi ...

  5. Vue.之.安装

    Vue.之.安装 第一步npm安装 首先:先从nodejs.org中下载nodejs   直到Finish完成安装. 打开控制命令行程序(CMD),检查是否正常 使用淘宝NPM 镜像 国内直接使用np ...

  6. Polyfill简介

    1.什么是Polyfill? Polyfill是一个js库,主要抚平不同浏览器之间对js实现的差异.比如,html5的storage(session,local), 不同浏览器,不同版本,有些支持,有 ...

  7. 【JZOJ4745】【NOIP2016提高A组模拟9.3】看电影

    题目描述 听说NOIP2016大家都考得不错,于是CCF奖励省常中了 K 张变形金刚5的电影票奖励OI队的同学去看电影.可是省常中OI队的同学们共有 N(N >= K)人.于是机智的你想到了一个 ...

  8. 【Django入坑之路】Django后台上传图片,以及前端的显示

    #setting配置: MEDIA_URL = "/media/" MEDIA_ROOT = os.path.join(BASE_DIR, "media") # ...

  9. FastAdmin 自学教程 - 目录(持续更新)(2019-10-11)

    FastAdmin 自学教程 - 目录 本自学教程将不定期更新. 了解 FastAdmin FastAdmin 开发第 1 天:了解 FastAdmin 框架 FastAdmin 开发第 2 天:安装 ...

  10. 人生苦短,LET'S GO! GO语言目录

    1.Golang开山篇,GO就是NB! 1-1.go开发工具安装 2.go-人生第一个go程序和基本语法 3.go-流程控制 4.go-函数 5.go-流程控制 6.go-复合类型 7.go-面向对象 ...