JZOJ NOIP2014模拟 8.13

来源:互联网 发布:python 3.x运算符 编辑:程序博客网 时间:2024/06/10 15:21

一、span

题意:n个点,m条边。要求选n-1条边将各点连成一棵树,并使所选边中最大的边权减最小的边权最小。

小论:把边按边权排序后,枚举最小边,做一次最小生成树,最后加进的边即最大边,更新答案。

情况:估计100分,实际100分。


二、无聊的草稿

题意:给一棵树,求一条主链,使主链上的节点数加上不在主链但与主链上的某个节点相连的节点数的和最大。

小论:将度数作为点权,做一遍最长链。最长链求法:从某节点开始,搜到距离该节点最远的一个节点。再由该节点出发,找到离该节点最远的一个节点,途中经过的路径即最长链(也叫树的直径)。为什么这样搜的就是最长链呢?证明如下:

设最长链为s-t,第一次搜到的节点一定是s或t。证明:设开始节点u,①u在最长链的路径上,则它搜到的一定是节点s或t(如果不是的话s-t就不是最长链了)②u不在最长链的路径上,它一定会搜到最长链上的某个点v,然后就沿最长链一直找到s或t(如果不是沿最长链搜的话,也就是最长链外有一点到v的距离大于s到v的距离或t到v的距离,这会与s-t为最长链矛盾)

既然第一次搜到的节点是最长链的某一节点的话,第二次搜的路径就一定是最长链了。

情况:估计100分,实际100分。


三、锻炼身体

题意:给出一个n*m的格子图('.'可以到,'x'不行)、出发坐标和k个时段。对于每一个时段,给出一个开始、结束时间和方向,要么沿这个方向移动(每秒移动1个格子),或者保持在原来的位置。求最多经过的长度。

小论:这是NOI2005的原题。设f[k,i,j]为第k个时段到(i,j)的最长距离。转移方程很容易想。但因为还要枚举按该方向走的长度,所以最坏情况下时间复杂度可能会达到O(200^4),需加优化。由于它每个时段走的方向一定,我们可以加个单调队列来优化。

情况:估计60分,实际100分。当时没加优化(因为我是顺推的,没想到优化方法),自己测了个极限数据也过不了。可没想到数据竟然让我水过了……



四、Train

题意:N个车站,M节车厢。每节车厢在某个站要接上火车,在后面的某个站又要脱离火车。加或取某节车厢在火车头或尾进行。

小论:贪心经证明不对。题解连大神moreD都表示看不懂。这题欢迎读者朋友们自行思考……

情况:估计:X分,实际:24分。虽然知道贪心不是正解,但还是觉得一些情况下还是对的,于是打了个类似NOIP2008双栈排序的贪心。



总结:对一些算法的模板题要敏感。dp要考虑正推和倒推两种情况,看哪种更优。

0 0