洛谷题面传送门

高速公路上正是补 blog 的时候,难道不是吗/doge,难不成逆在高速公路上写题/jy

首先形成的图显然是连通图并且有 \(n-1\) 条边。故形成的图是一棵树。

我们考虑什么样的树能够得到。考虑以 \(n\) 为根,由于每个点的编号都小于其父亲这个条件的存在,我们每次断开一条边时,两个连通块中编号最大的点肯定是这两个连通块中深度最浅的节点。而显然,对于一条边 \((u,v)\),如果 \(u\) 是 \(v\) 的父亲,那么断开 \((u,v)\) 时 \(v\) 肯定是所在连通块中深度最浅的节点,也就是说我们要为每个点 \(x\) 找一个祖先 \(p_x\),满足断开 \(x\) 与其父亲的边时,\(p_x\) 为其父亲所在连通块中深度最浅的节点。

考虑什么样的序列 \(p\) 符合要求。打个表发现一条链的情况答案是卡特兰数(cartesian number bushi)。而卡特兰数刚好是由 \(n\) 个左括号和 \(n\) 个右括号组成的括号序列的数量,而括号序列中每对括号肯定是不能相交的——即,要么相离,要么互相包含。因此我们猜测一组 \(p\) 符合条件,当且仅当不存在两个 \(x,y\) 满足 \(p_x,p_y,x,y\) 依次存在祖先关系。事实上这个结论是正确的可惜我不会证。这样就可以 DP 了。考虑 \(dp_{i,j}\) 表示确定了 \(i\) 祖先(注意,这里与传统的 DP 不同,因为传统的 DP 一般都假设子树内的状态已经确定,而这题是假设祖先的状态已经确定)的 \(p\),目前 \(i\) 还有 \(j\) 个祖先可以选择,有多少个钦定 \(i\) 子树内点的 \(p\) 的方法,考虑如何转移,我们枚举 \(p_i\) 是目前可行的点中,从下往上数的第几个,设为 \(c\),那么这样在钦定 \(i\) 的儿子时会 ban 掉 \(c-1\) 个祖先,同时又会为 \(u\) 的儿子新增一个符合要求的祖先——\(u\),因此我们有 \(dp_{u,j}=\sum\limits_{c=1}^j\prod\limits_{v\in\text{son}(u)}dp_{v,j-c+2}\)。这样直接转移是三方的,无法通过。不过注意到这个 \(\sum\) 可以用前缀和优化掉,具体来说我们设 \(dp_{u,j}=dp_{u,j-1}+\prod\limits_{v\in\text{son}(u)}dp_{v,j+1}\),这样记忆化搜索一下复杂度即可达到平方。

为什么会有个 freopen 呢?因为这是场 mns 的赛题……

const int MAXN=3000;
const int MOD=998244353;
int n,hd[MAXN+5],to[MAXN*2+5],nxt[MAXN*2+5],ec=0;
void adde(int u,int v){to[++ec]=v;nxt[ec]=hd[u];hd[u]=ec;}
int dp[MAXN+5][MAXN+5];
int calc(int x,int f,int k){
if(~dp[x][k]) return dp[x][k];dp[x][k]=0;
if(k>1) dp[x][k]=calc(x,f,k-1);int res=1;
for(int e=hd[x];e;e=nxt[e]){
int y=to[e];if(y==f) continue;
res=1ll*res*calc(y,x,k+1)%MOD;
} dp[x][k]=(dp[x][k]+res)%MOD;
return dp[x][k];
}
int main(){
// freopen("reflection.in","r",stdin);
// freopen("reflection.out","w",stdout);
scanf("%d",&n);
for(int i=1,u,v;i<n;i++) scanf("%d%d",&u,&v),adde(u,v),adde(v,u);
memset(dp,-1,sizeof(dp));int res=1;
for(int e=hd[n];e;e=nxt[e]){int y=to[e];res=1ll*res*calc(y,n,1)%MOD;}
printf("%d\n",res);
return 0;
}

洛谷 P6383 -『MdOI R2』Resurrection(DP)的更多相关文章

  1. 洛谷 P6071 『MdOI R1』Treequery(LCA+线段树+主席树)

    题目链接 题意:给出一棵树,有边权,\(m\) 次询问,每次给出三个数 \(p,l,r\),求边集 \(\bigcap\limits_{i=l}^rE(p,i)\) 中所有边的权值和. 其中 \(E( ...

  2. 洛谷 P6072 -『MdOI R1』Path(回滚莫队+01-trie)

    题面传送门 又是 ix35 神仙出的题,先以 mol 为敬 %%% 首先预处理出根节点到每个点路径上权值的异或和 \(dis_i\),那么两点 \(a,b\) 路径上权值的异或和显然为 \(dis_a ...

  3. 洛谷4月月赛R2

    洛谷4月月赛R2 打酱油... A.koishi的数学题  线性筛约数和就可以\(O(N)\)了... #include <iostream> #include <cstdio> ...

  4. 洛谷CF809C Find a car(数位DP)

    洛谷题目传送门 通过瞪眼法发现,\(a_{i,j}=(i-1)\text{ xor }(j-1)+1\). 二维差分一下,我们只要能求\(\sum\limits_{i=0}^x\sum\limits_ ...

  5. 【题解】洛谷P1169 [ZJOI2007] 棋盘制作(坐标DP+悬线法)

    次元传送门:洛谷P1169 思路 浙江省选果然不一般 用到一个从来没有听过的算法 悬线法: 所谓悬线法 就是用一条线(长度任意)在矩阵中判断这条线能到达的最左边和最右边及这条线的长度 即可得到这个矩阵 ...

  6. 洛谷 P2015 二叉苹果树(codevs5565) 树形dp入门

    dp这一方面的题我都不是很会,所以来练(xue)习(xi),大概把这题弄懂了. 树形dp就是在原本线性上dp改成了在 '树' 这个数据结构上dp. 一般来说,树形dp利用dfs在回溯时进行更新,使用儿 ...

  7. 【题解】洛谷P3959 [NOIP2017TG] 宝藏(状压DP+DFS)

    洛谷P3959:https://www.luogu.org/problemnew/show/P3959 前言 NOIP2017时还很弱(现在也很弱 看出来是DP 但是并不会状压DP 现在看来思路并不复 ...

  8. 【洛谷 P4934】 礼物 (位运算+DP)

    题目链接 位运算+\(DP\)=状压\(DP\)?(雾 \(a\&b>=min(a,b)\)在集合的意义上就是\(a\subseteq b\) 所以对每个数的子集向子集连一条边,然后答案 ...

  9. Bzoj3566/洛谷P4284 [SHOI2014]概率充电器(概率dp)

    题面 Bzoj 洛谷 题解 首先考虑从儿子来的贡献: $$ f[u]=\prod_{v \in son[u]}f[v]+(1-f[v])\times(1-dis[i]) $$ 根据容斥原理,就是儿子直 ...

随机推荐

  1. SpringCloud微服务实战——搭建企业级开发框架(七):自定义通用响应消息及统一异常处理

      平时开发过程中,无可避免我们需要处理各类异常,所以这里我们在公共模块中自定义统一异常,Spring Boot 提供 @RestControllerAdvice 注解统一异常处理,我们在GitEgg ...

  2. 【二食堂】Beta - Scrum Meeting 12

    Scrum Meeting 12 例会时间:5.27 20:00~20:10 进度情况 组员 当前进度 今日任务 李健 1. 知识图谱导出功能完成 issue 1. 继续完成文本保存的工作 issue ...

  3. [no_code][Alpha]发布声明报告

    项目 内容 2020春季计算机学院软件工程(罗杰 任健) 2020春季计算机学院软件工程(罗杰 任健) 作业要求 发布声明 我们在这个课程的目标是 设计出一个OCR表单处理软件 这个作业在哪个具体方面 ...

  4. linux与windows下文件编码问题

    注:转换操作均在Linux终端进行操作 DOS与Unix格式转换 安装工具:dos2unix.unix2dos # ubuntu apt-get install dos2unix apt-get in ...

  5. AGC019F

    题目大意 $n$ + $m$ 个问题,其中$n$ 个答案是$YES$,$m$个是$NO$的,你依次答题,每答一道,就可以立刻知道这道题的答案,求在最优策略下答错次数的期望,对$998244353$取模 ...

  6. 超级好用的轻量级JSON处理命令jq

    1 简介 jq是一个轻量级的命令行工具,让你可以非常方便地处理JSON数据,如切分.过滤.映射.转化等,就像sed.awk.grep文本处理三剑客一样.jq是用C写的,没有运行时依赖,你可以直接下载可 ...

  7. vs2015 MSB600 "inf2cat.ext"已退出,代码为2

    使用vs2015编译XDMA驱动过程中,报如下错误: vs2015 MSB600 "inf2cat.ext"已退出,代码为2 在使用Qt编译PCIE码表的过程中,出现C1038:无 ...

  8. Luogu P2467 [SDOI2010]地精部落 | 神奇的dp

    题目链接 DP 题目大意:给定一个数n,求1~n这n个整数的所有排列中有多少个波动数列,将这个数量%p后输出. 什么是波动数列呢?顾名思义,就是一个大.一个小.一个大.一个小--或者是一个小.一个大. ...

  9. Linux题目学习

    一.填空题: 1. 在Linux系统中,以 文件 方式访问设备 . 2. Linux内核引导时,从文件/etc/fstab 中读取要加载的文件系统. 3. Linux文件系统中每个文件用 i节点来标识 ...

  10. k8s入坑之路(13)kubernetes重要资源(namespace隔离 resources资源管理 label)

    Namespace --- 集群的共享与隔离 语言中namespace概念 namespace核心作用隔离 以上是隔离的代码.namespace隔离的是: 1.资源对象的隔离:Service.Depl ...