首页 > 其他分享 >[NOIP2022] 建造军营

[NOIP2022] 建造军营

时间:2024-11-21 16:29:17浏览次数:1  
标签:gets 答案 建造 son 军营 NOIP2022 rm times Size

前言

米奇妙妙 \(\rm{dp}\) , 也是高端计数

这种题看得懂想不出, 还是非常难蚌

能不能多想想再去看 \(\rm{TJ}\) 啊

算法

注意到除了割边, 其他的边都没有影响, 显然可以缩 \(\rm{e}\)-\(\rm{DCC}\) 再进行处理

这里发现缩完之后形成一棵树, 考虑树形 \(\rm{dp}\)

这里我有一个误区, 就是答案必须要是几个 \(f_x\) 组合到一起, 但是实际上完全不用
对于树这种特殊结构, \(f_{root}\) 已经包含了所有情况

因此令 \(f_{x, 0/1}\) 表示只在 \(x\) 的子树之内建造军营, 军营的
首先考虑答案式子, 我们注意到, 答案应该是多种情况累加, 因为 \(f_{x, 1}\) 实际上是不重不漏的, 主要需要处理的是那些无关紧要的边, 我们选择守或者不守
注意到如果缩完点之后当前子树的大小为 \(Size_x\) , 我们就有 \(Size_x - 1\) 条割边要守, 其中子树外的 \(m - Size_x + 1\) 条边可以任选
这里有一个超级巨大的问题: 对于当前节点到父节点的边, 一定不能选, 因为对于父节点, \(f_{fa, 1}\) 实际上考虑了这条边, 选上之后会导致重复, 因此记录答案时不能算这条边

事实上如果最早就有关于答案式的思路, 可以通过手推样例/观察性质发现这种性质, 但是我还是大为震撼

所以答案为

\[\sum_{i = 1, i \neq root}^{n} f_{i, 1} \times 2 ^ {m - Size_x} + f_{root, 1} \times 2 ^ {m - Size_x + 1} \]

太有实力啦

考虑递推

首先我们需要知道, 如果对于 \(x\) 的子树 \(son\) , 其中 \(son\) 内部有军营, 那么 \(x \to son\) 这条边必须要守, 其他无所谓

所以有

\[f_{x, 1} \gets f_{son, 1} \times f_{x, 0} + f_{son, 1} \times f_{x, 1} \]

\[f_{x, 0} \gets f_{x, 0} \times f_{son, 0} \times 2 \]

\[f_{x, 1} \gets f_{x, 1} \times f_{son, 0} \times 2 \]

初始化

\[f_{x, 0} \gets 1, f_{x, 1} \gets 2 ^ {Siz_x} - 1 \]

注意这里表示的是只选 \(x\) 这一 \(\rm{e}\)-\(\rm{DCC}\) 中点的可能性, 反正可以随便选, 边随便选的情况在计算答案时统计

代码

后补

总结

神秘计数方法

\(\rm{dp}\) 式子考虑不到的, 可以在统计答案时考虑

注意计数不重不漏, 注意初始化

标签:gets,答案,建造,son,军营,NOIP2022,rm,times,Size
From: https://www.cnblogs.com/YzaCsp/p/18561058

相关文章

  • 软件设计模式————(建造者模式)
    [实验任务一]:计算机组装使用建造者模式,完成下述任务:计算机组装工厂可以将CPU、内存、硬盘、主机等硬件设备组装在一起构成计算机,计算机的类型可以是笔记本,也可以是台式机。实验要求:1.画出对应的类图; 2.提交源代码;Java1.BuilderpublicabstractclassBuilder{......
  • P8868 [NOIP2022] 比赛(线段树维护区间历史和)
    题意给定排列\(a,b\),\(q\)次询问\(l,r\),你需要求出\(\sum_{l\lel'\ler'\ler}(\max_{i=l'}^{r'}a_i)(\max_{i=l'}^{r'}b_i)\)对\(2^{64}\)取模的值。\(n,q\le2.5\times10^5\)分析根据经典套路,按\(r\)扫描线,维护两个单调栈,那么加入一个数就相当于进行若干段区......
  • 整数二分—建造水族馆
    建造水族馆每次测试时限:2秒每次测试的内存限制:256兆字节输入:标准输入输出:标准输出题目:你喜欢养鱼,所以你决定建造一个水族馆。你有一块由n根柱子组成的珊瑚,其中i根柱子高ai个单位。之后,你将在珊瑚周围建造一个水族箱,具体如下:选取一个整数h>=1--水箱的高度。在水箱两侧建......
  • 「NOIP2022」比赛
    洛谷。题目简述给定两个数列\(a,b\),有\(q\)次询问,每次询问\([L,R]\)的所有子区间\([l,r]\)的\(\max_{i=l}^ra_i\times\max_{i=l}^rb_i\)之和。其中,\(n,q\le2.5e5\)。分析这很像历史版本和,但是我们写过的只有一个数组\(a\)的。那么先从部分分开始。对于\(n,......
  • NOIP2022 做题笔记
    由于本人NOIP2023做的太烂了,被教练拉去做NOIP2022了qwqfirsthour:这t1看上去还行,先写了secondhour:t2看上去有些难度,让我想一想thirdhour:快想出来了,先写一写吧fourthhour:写写写写写.....最后100pts遗憾离场......赛后有了深刻的认识,很多题是不能一步到位的,只能拼暴力......
  • [NOIP2022] 比赛 随机排列 部分分
    看到最大值,考虑使用单调栈搞出\([la_i,ra_i],[lb_i,rb_i]\)表示这一段区间\(i\)是\(a,b\)的最大值。预处理是简单的。inlinevoidinit(){staticautof=[](inta[],intl[],intr[])->void{staticintstack[N],top;top=0,a[n+......
  • 软件设计--建造者模式
    建造者模式建造者模式是一种创建型设计模式,它允许你创建复杂对象的步骤与表示方式相分离。建造者模式是一种创建型设计模式,它的主要目的是将一个复杂对象的构建过程与其表示相分离,从而可以创建具有不同表示形式的对象。概要意图将一个复杂的构建过程与其表示相分离,使得同样的......
  • 学习高校课程-软件设计模式-建造者模式和原型模式(lec4)
    Builder:ProblemExample:acomplexobjectthatrequireslaborious,step-by-stepinitializationofmanyfieldsandnestedobjects一个复杂对象的创建通常由多个部分组成,这些部分的组合经常变化Builder:SolutionExtracttheobjectconstructioncodeoutofitsown......
  • 6.5 已知有6个村子,相互间道路的距离如图所示,拟合建一所小学,现计划建造一所医院和一所
    点击查看代码importnumpyasnpdistances=np.array([[0,2,7,np.inf,np.inf,np.inf],[2,0,4,6,8,np.inf],[7,4,0,1,3,np.inf],[np.inf,6,1,0,1,6],[np.inf,8,3,1,0,3],......
  • 题解 [NOIP2022] 建造军营
    树形\(dp\)好题。观察题目发现,如果B国袭击后,导致A国两个军营不联通,那么B国袭击的一定是一条割边,反之,如果袭击的不是割边,那么不会导致任何影响。所以先进行边双缩点,变成一棵树,记每个联通块(缩完后)内的点数为\(wa\),边数为\(wb\),不妨先考虑对于树的情况如何处理。将问题进行转......