zoukankan      html  css  js  c++  java
  • 省选模拟8

    A. 序列

      看到这种奇怪的操作想分块就行了。对于每个块维护一个vector,表示取max的操作序列。由于加法和取max同时操作很难搞,可以考虑把这两个东西分开,就是给max减去加法的标记。于是重构的时候可以给每个点upper_bound就可以得到这个点经过了多少次取max。

    B. 旅行计划

      首先考虑给联通块内所有边和k同时除掉它们的gcd,最后乘回来。若k是奇数,那么只要在两个点之间走K次就可以了。

      考虑K是偶数的情况。在联通块内的边走若干次必然可以使得总路径长度mod k的值增加1,而在联通块内我们可以任意经过一条边偶数次,所以存在一种方案使长度mod k增加2。

      所以只要两点之间存在长度为奇的路径,或者说联通块内存在奇环,那么必然可以通过调整路径使答案为0,否则答案为1。

      特判一些情况即可。

    C. Hack

      理解不深刻。。。

      如果没有每条路径只经过一次的限制,那么直接最小割即可。

      最小割将原来的集合分成了S和T两个集合。假如一种割不合法,那么必然在原图中存在一条路径,从S集合到T集合回到S集合到T,所以只要将这样的路径判掉就可以。

      所以考虑将每条边反向边的流量设为正无穷,那么假如存在这样一条路径,从T到S那条边的反向边就会将两部分重新联通,所以不合法。

  • 相关阅读:
    2018.4.23 深入理解java虚拟机(转)
    2018.4.23 git常用操作命令收集(转)
    2018.4.23 设计模式的一些总结
    2018.4.23 pip使用
    2018.4.23 git命令总结
    2018.4.23 git删除已经add的文件
    2018.4.17 VFS
    记北京第一次跳槽
    RocketMQ存储机制01-存储文件组织与内存映射
    将博客搬至CSDN
  • 原文地址:https://www.cnblogs.com/hzoi-cbx/p/12204062.html
Copyright © 2011-2022 走看看