zoukankan      html  css  js  c++  java
  • CSPS模拟 96

        我菜的一批。

        反省一下,我只能在简单场考的好的原因。

        

        过分依赖灵感,不注意积累思路历程和各种套路。没灵感直接崩了

        懒得打暴力,主要还是代码能力限制,打暴力真的很费时费力

        不打对拍,这个emmm和第二条是相关联的..不知道为什么dalao们都有时间对拍

        思维僵化,即使思路上有一点突破,也会轻易地由于复杂度的问题hack掉这个思路,而不想去优化

        最重要的就是菜啦。什么时候能有题解所说的那种清晰自然的思路啊。

        

        T1

          通览了一遍题目,每个题都思考了一会,就过了40min了(?)

          没打过龟速乘,考场上也想不出来。

          高精调到1h40min(?)

        T2

          没剩多长时间,急忙打了n^2还挂了,成为一片绿色中一点耀(zha)眼的红

        T3

          复读考场思路,现在看来就是放p:

            主观上,小A应该会选择这样的路径去走:

              本身不是很长,而且被小B卡了之后还不会很长的路。

            假设小B要卡小A,那一定会在小A走到点i的时候卡掉i的一条出边,因为如果提前卡的话小A绕路的长度不会更长。

            而且卡掉的边一定是i到n的最短路上的边,否则没意义。

            先dijkstra求一发最短路,$dis[i]$

            然后我用树上启发式合并的方法正确求出了 i到n的最短路上第一条边被切断后的最短路长度 $replace(i)$

            然后思路就开始偏离

            那么对于一个点,如果小B卡这个地方,经过这个点的最短路径长度一定,就是$len[i]=dis[i]+replace[i]$(错的)

            那么从1到n,应该尽量避免那些$len[i]$特别大的点,因为会被卡死..

            所以再从1开始跑最短路(改装后),找出这样一条路径:

              这条路径上的点的$len[i]$的最大值是可能取到的最小值

          WA爆,现在回想,考虑经过i点的贡献时,没想到不一定是用最短路到达点i才被阻拦,可能在最短路上被直接截杀了,到不了点i。

        正解&感悟

        T1 龟速乘..好东西...

        T2 skyh有时候挺有素质

          比如教我nlogn的倍增

          考试的时候真是什么也想不到,觉得二分/倍增的复杂度彻底爆炸,就没认真分析

          记忆已经凿实的答案长度,每次在后面接上一段长度倍增的串,然后归并,暴力check

          如何考虑这个倍增的复杂度呢。

          对于每次后接的长度,它被$O(lenloglen)$排序然后$O(len)$,若失败则不再与复杂度有关,失败情况下,复杂度不超过$O(nlogn)$

          若成功,则长度倍增,设倍增k次,第k次长度为$2^k$,则复杂度为$sum 2^k*log 2^k = sum 2^k*k$

          复杂度与$2^k*k$同级,即成功的复杂度为$O(nlogn)$

          总的也是$nlogn$

        T3 好想咕咕咕啊

          不过按照题解打应该也没什么问题吧

          我感觉这题给我的收获主要在于最短路模型dp那一段

          如果有问题问我还是私聊吧(/w)

          不能咕了,skyh又教我做人了

          每天都被教做人。

          以下为skyh教我的

          认真观察题目给的转移式子!

          对于拓展j是的一条边j->i,都用max(f[j]+len[j->i],d(i,j))更新答案

          意思就是,这条边割还是不割两种情况取max

          如果取max取到后边,则割

          可是小B只能割一条边,于是有了一点诡异

          

          然而争当gtds的我怎么可能发现这式子的诡异呢

          显然的做法是,把f[j]+len[j->i]排序,将最小的f[j]+len[j->i]对d(i,j)取max,然后再排序      

          排序后的最小值作为答案,这样是小B截断了小A最优的一条路径,让小A取到了次优路径

          

          如果题解正确,那么每次的取max最多一次取到后面

          只有当j等于点i在最短路树上的父亲时才可能取到后面,这才是题解正确的原因。

          不要水题啊越水越lj

  • 相关阅读:
    【教程】模拟登陆百度之Java代码版
    Redis错误配置详解
    Redis内存存储结构分析
    Notepad++安装插件
    hadoop2.x 常用端口及定义方法
    微信订阅号可以开通微信支付吗?
    CDH 的Cloudera Manager免费与收费版的对比表
    Hadoop调度框架
    再谈spark部署搭建和企业级项目接轨的入门经验(博主推荐)
    Hive环境的安装部署(完美安装)(集群内或集群外都适用)(含卸载自带mysql安装指定版本)
  • 原文地址:https://www.cnblogs.com/yxsplayxs/p/11776048.html
Copyright © 2011-2022 走看看