HNOI2015 题解及感想

链接:https://loj.ac/problems/search?keyword=HNOI2015
感觉质量很高的一套题啊
收获还是挺大的
虽然每个题都肝了很久,似乎两天就肝完了?
虽然有很多困难,但是还是要独立思考啊
发现自己思考时有很多不足的地方,很容易被第一感觉带偏,一旦第一感觉不对,基本就肝不出来了。。这点一定要改正
如果要代码的就自己去loj拿吧

「HNOI2015」亚瑟王

首先,肯定是转化为每个数的贡献
想了很多奇奇怪怪的DP,但是似乎没什么效果(可能当时有点困。。)
膜了题解
发现我之前一直在思考一层一层做,然后发现很难DP
题解是把整个过程一起来看的
f i , j f_{i,j} fi,j表示后 i i i个数给了 j j j次机会的概率
转移比较简单,想到这个以后统计答案也很简单了,就自己思考吧
如果一层一层不好做,应当多想想全部一起做啊

「HNOI2015」接水果

首先,整体二分是一定要有的
然后,就是统计有多少条路径了。。
本来是很简单的题。。因为我的想法出现偏差而GG
我一直在想构造一个特殊的权值分配方案,使得可以直接用线段树维护
具体来说,就是让一条路径,只有两个点都在询问路径上才有1的贡献,否则为0的贡献
然后发现一直不会做。。
在JCP的提醒下,才转为二维数点。。
如果想到二维数点就简单多了
但是在考场上,是没有人提醒的
一定要自己提醒自己,换不同的方向想一想。。要不简单题可能就做不出来了

「HNOI2015」实验比较

一开始想了一个多小时,在TYB的提醒下才发现这是一棵树。。然后又肝了很久才肝出来
然后知道了DAG拓扑序列计数是指数级的。。怪不得想来想去不会做
平时做题的时候看题面不认真一直是很大的问题,这点以后一定要改正!!要不考场上忽略条件,可能就是崩盘的原因!!这个一定要注意!!
是树的话就可以DP了
不难想到,多个联通块可以用虚根连接变为一个联通块
要注意的是环的问题。。我一开始只拿了95分就是没判环。。然后WA了最小的点
我们把用 = = =连接的点看为一个点
设计状态 f i , j f_{i,j} fi,j表示以 i i i为根的子树,剩下 j j j个点的方案
状态合并的时候,就等价于你现在有两个序列 i , j i,j i,j,不改变两边原来的相对顺序,把 j j j插入到 i i i里面
因为有等于,在 i i i里面的任意一个元素都可以收纳一个 j j j里面的元素,就是 j j j的一个元素可以和 i i i合并在一起
不难想到,直接枚举合并了 k k k
然后我就在这最后一步卡了很久才想出来
我是智障
t t t i + j − k i+j-k i+jk
其实方案数就是 C t i ∗ C i k C_{t}^{i}*C_{i}^{k} CtiCik,因为i是不会消失的所以先确定 i i i的位置,然后我们只需要知道哪些位置容纳了j的元素,然后把 j j j直接放进去就是合法的新串了

「HNOI2015」开店

感觉最简单的一个题了。。
提供两个做法,两个都是树链剖分,其中一个是网上的,另一个是自己全站最SB做法(两个做法都与度数无关,听说有点分树之类的做法?)
但是个人感觉都很妙啊!!
第一个是网上比较大众的
先转化为求LCA深度的和
有一个很巧妙的转化,就是这个和,等价于把所有点到根的路径标记,然后深度和就是x到根的路径上所有的点,他们的贡献是他到父亲边的权值*标记个数!!仔细思考一下不难发现是正确的!!
然后主席树维护就可以了
第二个是利用树链剖分维护轻链信息
维护个数和 d e p [ x ] − d e p [ L C A ] dep[x]-dep[LCA] dep[x]dep[LCA]的和
如果可以离线很好做,按 l , r l,r l,r拍个序一个一个加上就好了
但是现在不行。。于是想了个鬼畜做法,就是每个点在轻链处拆成 l o g log log个节点,就可以把本来要离线一个一个加的操作变成先用主席树对于每一个r维护加完的结果了
感觉这个拆点的方法可以用在大多数强制在线的题目当中啊

「HNOI2015」落忆枫音

肝了很久。。并不会做
想的是计算两个方案,一个是不要这条边的,另外一个是要的
不要的显然是度数的乘积。。然后第二个想了很久。。
膜了题解。。
发现题解是用总方案减去不合法的
不合法的显然是一个环,然后他被多算了,环外所有点的度数积次
这个用总的积,乘环上所有点的逆元就可以了
考虑到去除掉这条边后仍有拓扑序
因此可以用拓扑排序来求
感觉这个带着答案跑拓扑DP的思想很妙啊

「HNOI2015」菜肴制作

以前做过,TYB说我当年会做,但是我现在不会做了
难道是我变菜了?
把图反过来,跑最大拓扑,就是把一个点比他大的都尽量放到后面了
符合题意。。
然后就没有了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值