1.Codeforce 704D

网络流题目的一个经典套路就是将两种选择变形为:

首先钦定一种选择,然后尝试替换为另一种选择。

如果有流量即为替换,否则算没替换。

所以本题直接建图,就得到了一个费用流做法。

但是本题还有一个特殊的性质,即 $r,b$ 是固定的,与每个点无关的。

所以可以直接根据 $r,b$ 的大小关系确定首先钦定的选择,然后直接跑最大流即可。

 

2.关于消负环

做法是这样的,把每个点拆成入点和出点。

然后将源点连每个出点 $\infty$ 边,每个入点连汇点 $\infty$ 边。

每个点的出点连向入点 $\infty$ 边,以上费用均为 $0$,再将原图中的边改为由出点连向入点即可。

然后跑最小费用最大流。

首先流满所有的源汇所连的 $\infty$ 边是可行的。

所以为了保证最大流的性质,源汇所连的 $\infty$ 边一定流满。

所以每个那么对于每一组入点和出点,假设这两个点之间流了 $k$,就是说 $out_x+k=in_x+k=\infty$,即 $out_x=in_x$。

意思就是每个点的出入度平衡,然后如果一些边能够替换一堆 $0$边,就是说出现了负环。

所以进行一些操作,就达到了消负环的效果。

因为太菜,我觉得这个消负环做法不是很行,但是值得一提的是用到的流量平衡思想。

然后对于负环的问题,其实可以用上下界网络流来解决。

考虑这样一个事情,一般的上下界网络流是钦定下界,然后去流上界-下界。

其实另一种做法是钦定上界,建反向边同样流上界-下界表示退流。

这样的话其实可以结合两种做法,只建正边权的边就可以解决这个问题。

 

3.chips

可能的的限制数是 $n$ 级别的,所以可以暴力枚举。

套用上面的流量平衡方法,一个想法就是建一些流量为 $1$,费用为 $1$ 的边,跑一个最大费用流,让流过这样的边来表示放上了棋子。

然后发现其实限制并不好搞,可以反转一下。

让流量为 $1$,费用为 $1$ 的边表示不放棋子。

在 $i$ 行 $i$ 列之间连流量为枚举的限制,费用为 $0$ 的边表示放上棋子。

每次判断合法然后更新答案即可。

 

4.离散变量(切糕)模型

因为边权为 $1$,所以最终的答案并不大。

对每个点弄一条串联的链表示最短路径的取值。 

对于一条边,给两条链加上对应的限制即可。

 

5.Codeforce 720 A

霍尔定理

对两个点内部的信息分别排序,然后最劣的情况一定出现在二者分别选择一段前缀。

另一种做法是考虑首先确定一些最劣情况下出现的椅子集合,然后选择能生成这样椅子集合的最坏的人的集合。

 

6.ARC076 F

这个时候考虑人的集合并不容易处理了。

所以考虑最劣情况下椅子的集合。

一定是一段前缀和一段后缀的并,即 $[1,l],[r,m]$ 

然后考虑怎样的人是被覆盖在这个集合中的,即所有满足 $L_i \leq l,R_i \geq r$ 的人。

这是一个二维数点问题,扫描线然后用线段树维护一下就行了。

 

7.删两条以内边使得图不联通

 

8.noi2017 游戏

 

9.bzoj 4152