zoukankan      html  css  js  c++  java
  • CF1387(BOI2020 Day2)

    A - Graph

    没啥好说的,直接设个未知数然后解个方程。

    如果 (x) 解不出来,那么就枚举断点。

    17分调了好久,以为是精度问题,实际是很 sb 的错误。

    静查很重要!

    B1 - Village (Minimum)

    对于一个菊花答案其实明显就是 2*花瓣。

    然后对于一棵树进行菊花剖分,这样每一个菊花都是局部最优解,然后发现菊花间交错肯定不是更优。

    如果剩下一个点可以并入任意一个菊花。

    严谨一点:下界其实是 2*(n-匹配数),而这个下界可以达到。

    B2 - Village (Maximum)

    为啥我感觉比 B1 还要简单

    直接搞上界就是 (sum_{e} min(n-sz_u,sz_u)) ,重心找到交错分配。

    C - Viruses

    整理一下数据:(G) 表示基因数,(m) 表示抗体数, (sum k leq 100) 表示基因转移个数, (sum l leq 50) 表示抗体总长,(G leq sum k)

    考虑 (m=0) 的部分分,直接转移跑最短路。

    (m=1) 时,记三维 (i,st),(ed) 表示以第 (i) 基因为基础繁衍,和那个抗体前缀后缀的最长匹配分别为 (st,ed),然后两个基因合并的时候就是把后一个的前缀加入跑 (KMP) 不能变成基因串。

    (m) 多的时候很自然就把 (KMP) 改成 (AC) 自动机,然后对于前缀和后缀各建一棵 (AC) 自动机,然后记两维表示在哪个节点,但好像这种方法很烦。。

    再换一种 (dp) 设法,(i,st,ed) 表示原本在 (AC) 自动机上在 (st) ,现在在 (ed),经过的变换是以 (i) 为基础的,最短长度。

    然后跑 (SPFA),每次对于所有转移条件都跑一次,对于一个转移,就是依次添加字符跑 (Floyd) 更新。直到所有 (dp) 状态跑完一遍没有变为止。

    状态数 (G (sum l)^2),设增广次数为 (T),则复杂度 (Tsum k(sum l)^3),信仰能过。

  • 相关阅读:
    CSS实现字母全大写
    人生职业规划与自身设想
    关于人生的一些想法,和淘客SEO的思想。
    保持积极向上的心态去把傻逼的坚持换成牛逼的结果
    SEO站群随想,及自我的认知和想法
    我是SEOer,我为自己代言
    打印出 html结构中的ul li
    js数据类型转换
    js object类型转换 内存泄漏 垃圾回收机制
    页面重置样式reset.css
  • 原文地址:https://www.cnblogs.com/Forever-666/p/15468128.html
Copyright © 2011-2022 走看看