NOIP2024 游记

比赛历程

保持以往的策略,先将每一道题都想一遍。T1 想了一个贪心,简单地证明感受了一下正确性。接着 T2 想了一个 计数DP ,感觉上它是对的。然后 T3 还是计数,一样简单地推了一个 DP 然后去看 T4。这时莫名的感觉时间有点紧,于是没有想多,想了一个可以拿到不错的分数的暴力就开始打代码。

T1 打完然后还调了将近 40mins,还不算超出计划之外。然后写 T2 ,写完发现大样例过不去,然后开始调,发现自己的 DP 是假的,于是又想了将近一个小时,但是没有成果。发现时间不对,于是开始写 T3,写完发现还是假的,由于前面耗费的时间太多了,也没有想着去找问题,把链的分打完就去写 T4。 T4 用尽可能快的速度写完,样例也能过。不敢耽搁,马上回去想 T2 。找问题找到最后 40+mins才找到问题,同时也想到了做法,于是马上开始打,幸好在最后 3mins 的时候过了所有大样例。

预计得分为 100+100+4+32=236

反思

本次比赛最差的地方在于 T2 的做法假掉了,严重消耗时间,影响心态。T3 的部分分已经想出结论了,但是因为在想题时没有注意计算的是生成树的个数,所以才挂了 k=1 的档。如果打完 T2 没有那么紧张,也许就会留点时间下来查错,多拿一点分。

对自己不能盲目自信,想到一个做法应该去多想一想它的正确性。要锻炼自己判断做法正确性的能力,就像 T2 如果要手模 n=3 是比较困难的,但是可以通过构造发现自己的错误。

在想题时不能忘了题面,就像 T3 ,如果没有忘掉题目计的是生成树的个数,就可以多拿点分,减少心态损耗。

改题

T3

k=1 是简单的,设所有点的度数 di ,答案为 (di1)!

考虑对于一棵生成树,以那些边为关键边可以生成出来。不难发现这些边构成一条从叶子到叶子的路径。于是我们对于每一个这样的路径去求方案数。只有当一条从叶子到叶子的路径上有关键边时,才会有 i=1n(di1)!iS(di1)1 的贡献。所以我们以一个不为叶子节点的点为根,然后 DP就好了。

T4

先进行一个转换 lcaal,al+1...ar1,ar=mini=lr1lcai,i+1 ,证明:对于它们的 lca ,至少有两棵子树中存在区间中的一些点。

于是我们设 ai=lcai,i+1 ,然后对于每一个 i[1,n1] ,求出最长的、以 ai 为公共祖先的区间 [li,ri] 。通过上面的转化,实际上就是求一个点左右两边第一个大于它的点。接下来就是对答案的计算,分类讨论交集关系,不难发现共有两种情况:相交与询问的区间被包含。对于相交的情况,我们就是要对于询问 j ,求满足 rili+2KjLj+Kj1riRj 的所有 imax(ai) 。这里只算了所以没有包含询问区间右端点的 i 的贡献,计算没有包含左端点的同理。然后是左右端点都被包含,这种情况显然合法,于是对于所有的区间右端点排序,扫一遍,用线段树统计答案即可。

posted @   Cyan_wind  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示