• 省选模拟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那条边的反向边就会将两部分重新联通,所以不合法。

  • 相关阅读:
    解决junit @RunWith无法使用的问题
    git .gitignore 有时不起作用的问题
    Docker常用命令 InsaneLoafer
    NOI2021 退役记
    2021“MINIEYE杯”中国大学生算法设计超级联赛 第二场 题解
    2021“MINIEYE杯”中国大学生算法设计超级联赛 第一场 题解
    数位DP
    Windows下Jmeter安装配置
    Linux安装docker-compose
    Ubuntu卸载MySQL
  • 原文地址:https://www.cnblogs.com/hzoi-cbx/p/12204062.html
Copyright © 2020-2023  润新知