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

原文地址:https://www.cnblogs.com/hzoi-cbx/p/12204062.html