zoukankan      html  css  js  c++  java
  • CF1268

    Codeforces Round #609 (Div. 1)

    A

    (b)(a) 的前 (k) 位后循环得到的数已经 (geqslant a) 了,则其为最优解,否则答案在第 (k) 位加 (1) 后再循环得到的数。需要注意处理进位。

    B

    放骨牌为二分图匹配,得答案为黑白染色后黑格子个数和白格子个数取 (min)

    C

    考虑先将 (1 sim k) 的数合并到一起,即相互相邻,然后再进行调整,第二步调整的花费即为逆序对数。肯定是所有数合并到中位数的位置是最优的。用树状数组维护每个数的出现位置,在树状数组上二分可求解中位数。

    D

    (n geqslant 4) 时,(n) 阶强连通竞赛图存在 (n-1) 阶强连通子图,因此翻转不在强连通子图的那个点,能使其仍为强连通图。

    根据这条引理,可以推得:当 (n>6) 时,可以翻转至多 (1) 个点使原图变成强连通图。

    考虑证明:

    若图中只有两个 (SCC),因为 (n>6),则一定有一个 (SCC) 点数 (geqslant 4),翻转其内一点,使该 (SCC) 仍强连通,然后会形成一个大环,因此图就为强连通图了。

    若图中至少有三个 (SCC),选取拓扑序既不是最小也不是最大的一个 (SCC),翻转其内一点,设拓扑序最小的 (SCC)(a),最大的为 (b),翻转的那个点为 (z),对于任何点对 (x,y),都存在路径 (x o b o z o a o y),因此图就为强连通图了。

    得做法为:(n leqslant 6) 时枚举翻转点的集合,(n>6) 时枚举翻转哪个点。

    还需快速判断一个竞赛图是否为强连通图。发现竞赛图缩点后,拓扑序最大的 (SCC) 中每个点都比该 (SCC) 外的任意一点出度小,设该 (SCC) 内点数为 (k),得其出度之和为 (inom{k}{2}),有结论:

    一个竞赛图非强连通的充要条件为其点按出度从小到大排序后,存在 (k<n) 使得最小的 (k) 个点出度之和为 (inom{k}{2})

    根据这个结论就能快速判断竞赛图是否为强连通图了。

    E

    先考虑树的做法,设 (f_x) 为点 (x) 的答案,按边权从大到小加入边,用 (f_x+f_y) 更新 (f_x)(f_y)。但是在仙人掌上沿用树的做法会算重,需要减去算重的部分。设 (min) 为环上边权最小的边,(max) 为在同一个环上边权最大的边,当 (min)(max) 的两条路径上的边权都递增时,(max) 的两个端点会在 (min) 的两个端点处算重,减去即可。

  • 相关阅读:
    hibernate中对象的3种状态:瞬时态(Transient)、 持久态(Persistent)、脱管态(Detached)
    object references an unsaved transient instance
    前端JS利用canvas的drawImage()对图片进行压缩
    js获取上传图片的尺寸大小
    多线程经典问题1——主线程子线程交替问题
    hdu 1689 Alien’s Necklace (bfs层次图剪枝)
    新炬数据库大师—暑期公益体验课
    怎样高速地安装Ubuntu SDK
    Spring boot 整合spring Data JPA+Spring Security+Thymeleaf框架(上)
    iOS 合并.a文件,制作通用静态库
  • 原文地址:https://www.cnblogs.com/lhm-/p/13810863.html
Copyright © 2011-2022 走看看