首页 > 其他分享 >【题解】[模拟赛20221115] Tree

【题解】[模拟赛20221115] Tree

时间:2022-11-15 20:35:13浏览次数:62  
标签:树边 题解 20221115 Tree 集合 加进去 条边 非树边 预处理

模拟赛20221115 Tree | CQNK

\(O(m*n*2^n)\) 很好做,但是本题有更优秀的做法:在此记录复杂度 \(O(n*2^n)\) 的做法。

考虑从后往前 dp,设 dp 状态 \(f_{s,0/1}\) 分别表示在填了 \(s\) 集合内的树边和必须填的非树边的方案数/价值总和。

先预处理出辅助数组 \(g_s\) 表示如果填了 \(s\) 集合内的树边,那么有多少条边必须填(有些非树边必须填在树边之后)。具体地,预处理 \(g_s\),可以求出有多少非树边所覆盖的集合的补集包含了 \(s\) 的补集,非树边中只有这些边是可以在 \(s\) 集合之前填的。

预处理出 \(g_s\) 之后就可以考虑怎么转移了,方案数比较简单,枚举 \(s\) 集合中这次填的是哪条边,从集合 \(t\) 转移过来。原本只有填了 \(g_t\) 条边,现在填了 \(g_s\) 条边,新增了一条树边和 \(g_s-g_t-1\) 条非树边,其中树边一定是填在最前面的,而非树边就可以在剩下的 \(g_s\) 个位置随便填。于是这一步的方案数就是 \(A_{g_s-1}^{g_s-g_t-1}\)。综上,转移就是: \(f_{s,0}=\sum_t f_{t,0}*A_{g_s-1}^{g_s-g_t-1}\)。

价值总和比较难算,如果在开头加一条树边,那么所有树边的排名都会+1,对于一个方案的贡献就是 \(popcount(s)\)。然后考虑要加的那 \(g_s-g_t-1\) 条非树边,假设一条一条依次加入,如果现在已经填了 \(x\) 条边,价值之和为 \(y\),那么新加进去的这条边就有 \(x+1\) 个位置可以填,而加进去这条边以后,可能有一些已经加进去的树边排名+1,假设原本这些树边的排名分别是 \(a_1,a_2,\dots,a_{|T|}\) 那么对于排名 \(a_i\) 的边,新加进去的这条边只有在填在开头的 \(a_i\) 个位置才会使其排名+1,所以左右方案对排名的贡献就为 \(\sum a_i\),结果发现这个就是价值之和 \(y\)。总结一下:在已经填了 \(x\) 条边,价值之和为 \(y\) 的基础上加入一条新的边,\(y'=(x+1)*y+y=(x+2)*y\),其中 \((x+1)*y\) 是继承之前的贡献,\(y\) 是新填的这条边所有方案的贡献。而现在要加入 \(g_s-g_t-1\) 条非树边,那么:\(f_{s,1}=f_{t,0}*popcount(s)+f_{t,1}*\prod_{x=g_t}^{g_s-2}(x+2)\)。

预处理阶乘即可 \(O(1)\) 转移。

标签:树边,题解,20221115,Tree,集合,加进去,条边,非树边,预处理
From: https://www.cnblogs.com/william555/p/16893734.html

相关文章

  • 20221115面试题
    XXXXX一面vue3APIref和reactivevue-router的两种模式hashhistory区别vuexmutation同步action异步commit调用mutation方法dispatch调用action方法大屏经验地......
  • 题解 ARC001C【パズルのお手伝い】
    postedon2021-01-1118:20:37|under题解|source前言这道题与八皇后很像,可以做完八皇后再来做这道题。如果你\(\color{white}\colorbox{red}{WA}\)了,请检查你有......
  • 题解 UVA12265【贩卖土地 Selling Land】
    postedon2022-09-2414:33:29|under题解|sourceproblem一个黑白矩阵,求以每个点为右下角,能围出的周长最大的全白矩形的周长。\(n\leq2000\)。solution试图进行......
  • tree 动态添加、删除树结构数据
    tree.vue组件<template><div><div@click="getData":style="getDetph(currentItem.level)"class="li"><spanclass="icon"></span>......
  • 焦点科技编程挑战赛2022题解
    比赛说明:比赛在四个学校开展,南理南航南农和矿大。题目查找文本差异要求origin和dest中分别包含1000w+条数据dest对数据进行了打乱操作,即origin和dest中相同数据行的......
  • CF1598F RBS 题解
    题意给\(n\)个串,求将这\(n\)个串以任意顺序接起来的最大的是合法括号序列的前缀数。分析\(n\)很小,考虑状压dp。有一个很典的转化是将(看成\(+1\),将)看成\(-......
  • 20221115_T4B_折半搜索双指针
    题意市面上共有\(n\)张门票,方便起见,我们把它们从\(1\)至\(n\)编号。其中,\(i\)号门票对应的场次为第\(b_i,1\leqb_i\leqk)\)场,价格为\(c_i\)元,且座位的排数为......
  • test20221115 打铁记
    总述\(53+20+20+0=93\),班上\(rk9\),太菜了。考场T1特殊性质+暴力(可是没有打满),T2特殊性质,T3暴力。费时\(40\)分钟,剩下的时间写正解(没写出来)+摆烂。感谢cy同志让......
  • 20221115_T3A+_贪心二分
    题意你在和Yazid做游戏。Yazid给了你一棵\(n\)个节点的树,并让你删除这棵树上的恰好\(k\)条边,使得整棵树被分成\(k+1\)个连通块。你觉得太简单了,随便删k条边......
  • CF 1743 题解
    比赛链接:https://codeforces.com/contest/1743题解:AB水题//bySkyRainWind#include<cstdio>#include<vector>#include<cstring>#include<iostream>#include......