首页 > 其他分享 >CF1868C Travel Plan 题解

CF1868C Travel Plan 题解

时间:2023-10-18 10:56:03浏览次数:100  
标签:log 题解 Travel 路径 Plan 权值 长度 复杂度 二叉树

原题

翻译

  • 发现所有长度相同的简单路径的权值可能情况相同,且最长的简单路径长度为 \(O(\log n)\) 级别,考虑维护所有长度的简单路径在一棵树上出现的次数,每种简单路径的权值在所有树上出现的次数,相乘即使答案。
  • 我们考虑长度为 \(x\) 的路径对答案的贡献,考虑枚举这条路径的贡献 \(k\) ,让一个路径的最大值恰好 \(= k\) 是困难的,因此我们考虑容斥。及让一个路径的 \(\max \leq k\) ,然后再做一个差分即可得到恰好 \(= k\) 的答案。方案数显然为 \(m^{n-x} \sum\limits_{k=1}^{m} k(k^x-(k-1)^x)\) ,其中求和中 \(\times k\) 是因为这条路径的权值为 \(k\)
  • 第二步要做的是统计各个长度的路径个数。完全二叉树以低复杂度 dp 是困难的,故我们先假设原树是一个满二叉树。容易想到设 \(f_{i,j}\) 表示以深度为 \(i\) 的满二叉树,长度为 \(j\) 的路径个数, \(g_{i,j}\) 表示深度为 \(i\) 的满二叉树,以根为起点长度为 \(j\) 的路径个数。容易得到转移:

\[\begin{cases} g_{i,j} = 2g_{i-1,j-1} \\ f_{i,j} = 2f_{i-1,j} + g_{i,j} + \sum\limits_{k=1}^{j-2} g_{i-1,k} \times g_{i-1,j-k-1} \end{cases} \]

  • 然后我们要怎么解决完全二叉树的问题呢?这里有一个比较重要的性质:一个完全二叉树内本质不同的子树只有 \(O(\log n)\) 个。证明就考虑对于一个节点,对于他的两个儿子,肯定一个是完全二叉树一个是满二叉树。因此我们不停递归是完全二叉树的儿子直至到达叶子节点,经过的路径长度显然是树高,即 \(O( \log n)\)
  • 因此我们只需要在 dfs 过程中合并两个结果即可
  • 小 tips : 求一个树是否为满二叉树可以判断这个树 一直往左走的次数 是否等于 一直往右走的次数,这么判断复杂度是 \(O( \log n)\) 的
  • 小 tips2 : 计算 \(f_{i,j}\) 和 \(g_{i,j}\) 可以预处理
  • 小 tips3 : 计算幂时可以不用快速幂,而是把要用到的提前预处理好
  • 最终复杂度 \(O(m \log n + T \log^3 n)\)
  • 小 tips4 : 貌似还可以继续优化:
    1. 倍增求深度的话一个 \(O( \log n)\) 会变成 \(O( \log \log n)\) ,这很小,可以当成常数
    2. 计算 \(f_{i,j}\) 这个式子好像可以用多项式优化(我也不会 QwQ)

标签:log,题解,Travel,路径,Plan,权值,长度,复杂度,二叉树
From: https://www.cnblogs.com/fox-konata/p/17771567.html

相关文章

  • 【前缀和优化 dp】CF1542E2 Abnormal Permutation Pairs (hard version) 题解
    CF1542E2首先时间复杂度肯定是\(\mathcal{O}(n^3)\)的。容易想到先枚举最长公共前缀,然后枚举\(p_{len+1}\)和\(q_{len+1}\),再枚举逆序对数进行统计。令\(f_{i,j}\)表示有\(j\)个逆序对的\(i\)阶排列的个数。易得转移\(f_{i,j}=\sum\limits_{k=\max(j-i+1,0)}^{j}f......
  • 【根号分治】P9212 「蓬莱人形」 题解
    P9212看到除法相关容易想到根号分治。先对\(x,y\)进行讨论,不妨令\(0\lex,y<m\)。\(x<y\)时,当满足\(a_i+y<m\)或\(a_i+x\gem\)时,即当\(a_i<m-y\)或\(a_i\gem-x\)满足\((a_i+x)\bmodm<(a_i+y)\bmodm\),即\(a_i\bmodm\in[0,m-y-1]\bigcup[m-x,m......
  • 【dp】【竞赛图的性质】ARC163D Sum of SCC 题解
    ARC163D发现这个竞赛图一定能被分为两个集合\(A\),\(B\)。满足\(\forallu\inA,v\inB\),均有\(u\tov\inE\)。答案就是划分这两个集合的方案数。证明:首先,竞赛图缩完点后一定是一条链,对强连通分量进行标号,满足编号小的强连通分量指向编号大的强连通分量。不妨令竞赛图\(G\)......
  • 【dp】【进制】P3464 [POI2007] WAG-Quaternary Balance 题解
    P3464显然的,先将原数变为四进制的数。由于算的是进位/不进位的代价最小值和方案数,容易想到dp。这里假定该四进制数是从高位到低位的,顺序显然是由低位到高位。令\(f_{i,0/1}\)表示第\(i\)位进/不进位的最小代价,\(g_{i,0/1}\)表示的是最小代价下的方案数。转移是简单的......
  • plan
    数据结构并查集去刷一点题树状数组区间加,区间求记一下,有时间搞一下逆序对线段树(重点)区间加区间求和都挺简单,区间乘什么的都要熟练,逆序对要尝试搞一下,去把之前没A的线段树搞明白线段树合并线段树上二分线段树动态开点?字典树(trie)也是比较重要的练一下板子有很多题目......
  • [题解] CF1790E - XOR Tree
    CF1790E-XORTree题意给定一颗无根树,在可以改变任意一个点的点权操作基础上,让树上任意简单路径的异或和不为\(0\),问最少需要多少次操作。思路假设某个点为根,设\(pre_x\)为\(x\)点到根的树上前缀异或和,\(a_x\)为\(x\)的点权,则\(x\)和\(y\)之间简单路径的异或和......
  • [题解]CF514D R2D2 and Droid Army
    思路首先,可以转化题意,找到一个极长的区间\([l,r]\)使得(其中\(mx_i\)表示\([l,r]\)区间中属性\(i\)的最大值):\[\sum_{i=1}^{m}mx_i\leqk\]显然对于这个东西当\(l,r\)发生移动时,是极其好维护的,所以想到双指针。因为\(m\leq5\),所以我们可以直接开\(m\)个ST表......
  • 题解——2023年码谷提高组模拟赛1016
    题解——2023年码谷提高组模拟赛1016一套被各种转来转去的题;参考:https://blog.csdn.net/liuziha/article/details/127353981、https://www.luogu.com.cn/blog/Chen5201314/xiao-nei-bi-sai-1025-zong-jie-ti-xie和https://www.cnblogs.com/Clyfort/articles/0927-test-solutio......
  • 「BZOJ2505」tickets 题解
    preface网上目前还没看到我的方法,就大概讲一下做法solution首先想到贪心,考虑\([l,r]\)的最大次数,一定是找到最小的\(x\)满足\(l\simx\)的位数的和大于等于\(k\),然后递归的求解\([x+1,r]\),易证。还是考虑将\(Query(l,r)\)拆分成\(Query(1,r)\)和\(Query......
  • RTMP dimensions not set问题解决方案
    问题RTMP开始推流,打印错误提示:dimensionsnotset源码位置libavformat\mux.ccaseAVMEDIA_TYPE_VIDEO:if((par->width<=0||par->height<=0)&&!(of->flags&AVFMT_NODIMENSIONS)){av_log(s,A......