zoukankan      html  css  js  c++  java
  • CSP-S 模拟50

    T1上来就想到填坑,后边想了俩小时都没想出来,就交了一个暴力水了30

    T2 用莫队水过的(我没脸)

    T3 不会

    然后放成绩,在T2的大幅加成下,拿到了130分的好成绩

    T1 施工(好题

      对于一个l,r的建筑物之间有坑(所有的都比两边小),最好把它填平

      Dp数组定义f[i]表示前i个建筑物的代价,且第i个建筑物不增高,显然是把i作为了一个小范围内最高建筑物处理的

      f[i]有f[j]转移过来,j为i前某一个建筑物且j~i之间没有比他俩高的建筑物,这是一个“坑”

    设都填成高度为t的,填平的代价是

            $ sumlimits_{k=j+1}^{i-1}(t-h_k)^{2}+c*(h[i]+h[j]-2*t) $

      这是个关于t的二次函数 $ A=i-1-j$   $B=-2*sumlimits_{k=j+1}^{i-1}h_k-2*c$   $C=h[i]+h[j]+sumlimits_{k=j+1}^{i-1}h_k^2$

    直接求出最优的 t=B/(-2A) 更新答案即可

    T2 蔬菜

      正解四维偏序(那是个啥东东?)

      我用二维莫队,“暴力”碾标算

    T3 联盟(好题)

      dfs 求直径长度

      dfs 把直径这条链抽出来

      因为被删的边一定是直径上的边,否则的话直径不减

      那么从已经抽出来的直径里一个个枚举边,

      考虑删掉它整棵树会变成两个联通块(树),两棵树合并的直径最小是$ max(直径_1,直径_2,ceil(直径_1/2)+ceil(直径_2/2)) $

      求这两棵树的直径的话,考虑原直径的两个端点会分别在这两棵树里,而且一定在分别的直径上(因为在最长链上)

      分别从这两个端点dfs预处理原树每一个点到这两个端点的距离,那么一个联通块中的直径就是这个联通块里的点到端点的最大距离(这个端点包含在这个联通块里)

      第一问求出最小的直径

      第二问 统计一下直径为最小直径的个数,并记录可删的边的编号

      第三问 随便找可断的边的俩端点,在找这两个联通块中dis(到端点的距离)为该联通块直径/2 的点(即要连边的点)输出

  • 相关阅读:
    单细胞转录组CNV分析
    瘦子增肌计划 | 健身
    WashU Epigenome Browser | ChIP-seq | DNase-Seq | ATAC-seq | 表观
    羽毛球新手教学
    可变剪切 | isoform | 提取特定exon的usage | DEXSeq
    文献快读 | 单细胞测序肾癌的免疫微环境与临床疗效的关系
    內外全科醫學士課程 | MBBS | 医疗
    天龙八部 | 中国名著 | 刷剧
    当代人工智能的基石 | 数据标注
    提取基因的特定外显子exon的碱基序列 | NCBI
  • 原文地址:https://www.cnblogs.com/heoitys/p/11573680.html
Copyright © 2011-2022 走看看