时间安排
7:30–7:40 看题,T1貌似可以分治,T2貌似是个类似于卡特兰数的东西,T3和 noip 非常像,貌似用割点什么的树形dp一下就行了。
7:40–8:10 T1,考虑分治,用hash表维护一下就行了。
8:10–9:50 T2, n^3 很好写,考虑直接用卡特兰数算,问题在于如何去重,尝试无果。
9:50–11:40 T3,貌似可以建造圆方树,对于 n^2 的当可以暴力跑,发现 \sum 有限制,于是需要虚树。仔细想了想发现 dp 会非常麻烦,不太能做,想着能不能直接对割点之间建图,然后是换根 dp 。写到最后发现,建的图有点问题。到最后没调出来。
回顾反思
T1: 属于分治的经典题,通过钦定答案,可以转化为开桶询问的问题。
T2:首先是去重的问题,假设钦定了左右括号配对的数量,那么这些配对会形成若干个连续段,那么在这些空隙中,必然由一个前缀右括号和左括号构成,这样就解决了去重的问题。那么假设钦定了 左括号数量,配对对数,有括号数量也会钦定,那么将模型看做格子图上路径问题,就可以组合数求解了。
T3:
圆方树+虚树+换根dp
圆方树要熟悉一下。
其二是计算方式的问题,要求所有方案下剩余点的数量和,可以转化为 n*方案数-所有方案下被删的点的数量和 ,这样的补集转化往往能大大解决问题。
虚树 dp 的时候,由于贡献往往只在虚树上的点上,所以贡献的最优性会有一些性质,这道题虽然一条虚树边上有许多点,但分析性质可得有用的点只有边的两端的点和虚树上的结点。这也可以简化问题。
本文描述了一位参赛者在编程竞赛中的时间管理和解题策略。T1题目通过分治和开桶询问解决;T2题目的关键在于去重,利用卡特兰数和连续段概念;T3题目的难点在于圆方树、虚树和换根DP的应用,提出了补集转化的思考方式。
6664

被折叠的 条评论
为什么被折叠?



