YbtOJ#20081-[NOIP2020模拟赛B组Day8]树上排列【组合数,树形dp】

正题

题面链接:https://www.ybtoj.com.cn/contest/62/problem/3


题目大意

nnn个点的一棵树,每个边的边会表示一个大小关系(如px>pyp_x>p_ypx>pypx<pyp_x<p_ypx<py)。求有多少个排列满足所有条件。


解题思路

考虑树形dpdpdp,设fi,jf_{i,j}fi,j表示点iii的子树中有jjj个比他小的数字时的方案数。

那么如果有条件py<pxp_y<p_xpy<px考虑如何转移,我们枚举一下i,ji,ji,j表示之前比iii小的数的个数和yyy里面比xxx小的个数,然后再枚举一个kkk表示yyy里面比yyy小的数的个数。
然后用组合数插板表示方案,发现这样是O(n3)O(n^3)O(n3)的,发现kkk可以前/后缀和优化,所以可以缩掉,时间复杂度为O(n2)O(n^2)O(n2)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=5100,XJQ=998244353;
struct node{ll to,next,w;
}a[N*2];
ll n,tot,ls[N],c[N][N],f[N][N],g[N],siz[N],ans;
ll C(ll n,ll m){return c[n+1][m+1];}
void addl(ll x,ll y,ll w){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;a[tot].w=w;return;
}
void dfs(ll x,ll fa){f[x][0]=1;siz[x]=1;for(ll p=ls[x];p;p=a[p].next){ll y=a[p].to;if(y==fa)continue;dfs(y,x);for(ll i=0;i<=siz[x]+siz[y];i++)g[i]=0;if(a[p].w){for(ll i=0;i<siz[x];i++){ll tmp=0;for(ll j=siz[y]-1;j>=0;j--){ll px=i,py=j;tmp=(tmp+f[y][j])%XJQ;ll sx=siz[x]-i-1,sy=siz[y]-j-1;(g[siz[x]+siz[y]-sx-sy-2]+=f[x][i]*tmp%XJQ*C(sx+sy+1,sx)%XJQ*C(px+py,py)%XJQ)%=XJQ;}}}else{for(ll i=0;i<siz[x];i++){ll tmp=0;for(ll j=0;j<siz[y];j++){ll px=i,py=j;tmp=(tmp+f[y][j])%XJQ;ll sx=siz[x]-i-1,sy=siz[y]-j-1;(g[px+py+1]+=f[x][i]*tmp%XJQ*C(px+py+1,px)%XJQ*C(sx+sy,sy)%XJQ)%=XJQ;}}}siz[x]+=siz[y];for(ll i=0;i<=siz[x];i++)f[x][i]=g[i];}return;
}
int main()
{freopen("perm.in","r",stdin);freopen("perm.out","w",stdout);scanf("%lld",&n);for(ll i=1;i<n;i++){ll x,y;scanf("%lld%lld",&x,&y);addl(x,y,0);addl(y,x,1);}c[0][0]=1;for(ll i=1;i<N;i++)for(ll j=1;j<N;j++)c[i][j]=(c[i-1][j]+c[i-1][j-1])%XJQ;dfs(1,1);for(ll i=0;i<siz[1];i++)(ans+=f[1][i])%=XJQ;printf("%lld\n",ans);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320373.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何简单的在 ASP.NET Core 中集成 JWT 认证?

前情提要&#xff1a;ASP.NET Core 使用 JWT 搭建分布式无状态身份验证系统文章超长预警&#xff08;1万字以上&#xff09;&#xff0c;不想看全部实现过程的同学可以直接跳转到末尾查看成果或者一键安装相关的 nuget 包自上一篇介绍如何在 ASP.NET Core 中集成 JWT 的博文发布…

【二分】【暴力】蛋糕(gmoj 3918)

蛋糕 gmoj 3918 题目大意&#xff1a; 有一个蛋糕&#xff0c;分成n∗mn*mn∗m个单位&#xff0c;现在横竖各切三刀&#xff0c;使其分成16个矩阵&#xff0c;使价值最小的矩阵价值最大 输出样例 5 5 95998 21945 23451 99798 74083输入样例 3数据范围 40%的数据&#x…

Music Problem

文章目录题目描述题意&#xff1a;题解&#xff1a;传送时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 131072K&#xff0c;其他语言262144K 64bit IO Format: %lld 题目描述 Listening to the music is relax, but for obsessive(强迫症), it …

【DP】翻硬币(jzoj 3921)

翻硬币 jzoj 3921 题目大意&#xff1a; 给你一个长度为nnn的当前01串和目标01串&#xff0c;现在你要做mmm此操作&#xff0c;每次操作你要使kkk个不同的位取反&#xff0c;现在问你有多少种方法可以使当前01串变为目标01串 输入样例&#xff1a; 3 2 1 100 001输出样例&…

可扩展架构设计的三个维度

业界对于可扩展的系统架构设计有一个朴素的理念,就是&#xff1a;通过加机器就可以解决容量和可用性问题这一理念在“云计算”概念疯狂流行的今天&#xff0c;得到了广泛的认可&#xff01;对于一个规模迅速增长的系统而言&#xff0c;容量和性能问题当然是首当其冲的。但是随着…

YbtOJ#20082-[NOIP2020模拟赛B组Day8]导出子图【dp】

正题 题面链接:https://www.ybtoj.com.cn/contest/62/problem/4 题目大意 nnn个区间&#xff0c;如果第xxx个区间和第yyy个区间有交集那么xxx到yyy直接就有一条边。 求这张图上的所有导出子图中有多少棵树。 解题思路 条件可以转换为这些区间联通并且没有一个位置被333个区间…

.NET Core开发日志——简述路由

有过ASP.NET或其它现代Web框架开发经历的开发者对路由这一名字应该不陌生。如果要用一句话解释什么是路由&#xff0c;可以这样形容&#xff1a;通过对URL的解析&#xff0c;指定相应的处理程序。回忆下在Web Forms应用程序中使用路由的方式&#xff1a;然后是MVC应用程序&…

【单调栈】奶牛的歌声(jzoj 1256)

奶牛的歌声 jzoj 1256 题目大意 有n头牛&#xff0c;每头牛的声音可以被两边第一头比他高的牛所听到&#xff0c;音量为S&#xff0c;问听到声音的音量之和最大的牛听到的音量之和是多少 输入样例 3 4 2 3 5 6 10输出样例 7样例解释 队伍中有3头奶牛&#xff0c;第1头牛…

P3168-[CQOI2015]任务查询系统【主席树】

正题 题目链接:https://www.luogu.com.cn/problem/P3168 题目大意 nnn个任务(si,ei,ti)(s_i,e_i,t_i)(si​,ei​,ti​)表示从si∼eis_i\sim e_isi​∼ei​的任务优先级为tit_iti​。 然后每次询问一个时刻前kkk小的优先级任务优先级和。 解题思路 开主席树&#xff0c;在sis…

相反数

A 相反数 传送 题意&#xff1a; 一个数加上他的相反数 题解&#xff1a; 用字符串存数&#xff0c;分出求出本身和相反数的值&#xff0c;然后相加输出&#xff0c;注意判断相反后出现0的情况 代码 #include<bits/stdc.h> using namespace std; int main() {str…

博客开通

开通博客第一天&#xff0c;纪念一下——

.NetCore Cap 结合 RabbitMQ 实现消息订阅

开源分布式消息框架 Cap 可以在GitHub上拉也可以通过nuget添加上一篇博文写了 Windows RabbitMQ的安装使用 Cap支持事务&#xff0c;通过捕获数据库上下文连接对象实现 消息事务&#xff0c;消息持久化怎么来实现消息订阅 消费&#xff1f;使用起来非常简单&#xff0c;主要通过…

SAM学习小记

前言 只是一个小记&#xff0c;不是算法详解 参考资料 史上最通俗的后缀自动机详解 广义SAM模板题解 正题 概念 定义 简单的&#xff0c;一个有向无环图&#xff0c;边有字母&#xff0c;满足起点开始的每一条路径都是原串的一个子串。 并且保证复杂度在O(n)O(n)O(n)级别内…

【DP】滑雪场的缆车(jzoj 1257)

滑雪场的缆车 jzoj 1257 题目大意 给你一座山的图&#xff08;有n个间隔相同的点&#xff09;&#xff0c;现在让你从第一个点连到最后一个点&#xff0c;一条线的两个端点的水平距离不能大于m&#xff0c;且线不能通过地面&#xff0c;最多挨着地面&#xff0c;现在问你最少…

小H和游戏

文章目录题目描述题解&#xff1a;传送时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format:%lld 题目描述 小H正在玩一个战略类游戏&#xff0c;她可以操纵己方的飞机对敌国的N座城市(编号为1~N…

Top Secret Task(dp+滚动数组)

传送门&#xff1a; 题目 dp[i][j][k] 表示 考虑到第i个数 计算前j个数的和 进行了k次操作 则有 若不把第i个数放入前j个数中 dp[i][j][k] dp[i-1][j][k] 若把第i个数放入前j个数中 至少需要把第i个移到第j个&#xff0c;即进行i-j次操作if(k > i-j) dp[i][j][k…

asp.net core 发布到 docker 容器时文件体积过大及服务端口的配置疑问

在 asp.net core 发布时&#xff0c;本人先后产生了3个疑问。1、发布的程序为什么不能在docker容器中运行当时在window开发环境中发布后&#xff0c;dotnet xxx.dll可以正常运行&#xff1b;但放入docker容器后就报 *.*.deps.json not found 的错误。后根据下面的文章解决了问题…

[2020.11.25NOIP模拟赛]出租车【dp】

正题 题面链接:https://www.luogu.com.cn/problem/U142298?contestId37766 题目大意 nnn个人有起点和终点&#xff0c;按顺序上车&#xff0c;但下车可以任意顺序&#xff0c;车最多同时只能载444个人。求车的最短路程。 解题思路 显然我们需要把上次上车的人&#xff0c;现…

纪中B组模拟赛总结(2019.12.21)

&#xff08;因为是两人一号&#xff0c;所以不方便显示成绩就不打了&#xff09; 总结&#xff1a; 今天竟有四道题&#xff01;&#xff01;&#xff01; T1看过之后&#xff0c;想了大概10分钟然后想了出来&#xff0c;就是一个单调栈&#xff0c;不算特别难 T2一开始想到…

水题(water)(非详细解答)

传送 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 32768K&#xff0c;其他语言65536K 64bit IO Format: %lld 题目描述 其中&#xff0c;f(1)1;f(2)1;Z皇后的方案数&#xff1a;即在ZZ的棋盘上放置Z个皇后&#xff0c;使其互不攻击的方案数。…