zoukankan      html  css  js  c++  java
  • [基本操作]网络流和最小割

    CXM:网络流都是套路

    然而我发现我并不会网络流,所以来搞一搞

    应该不会放代码。。。有点懒

    bzoj1066 蜥蜴

    一个 $r imes c$ 的网格里,每个格有一个柱子,有些柱子上有蜥蜴,每个地方有一个跳跃半径,每次蜥蜴从柱子上跳开的时候,他起跳点的柱子高度 -1

    不能有两个蜥蜴在同一个柱子上,柱子高度为 0 就是没柱子了,问最多能让多少蜥蜴跳到网格外面

    sol:

    外面建一个汇 T,源 S 向每个有蜥蜴的地方连边,能跳到 T 的向 T 连边,每个点向能跳到的点连边

    然后发现,只有 S 出来的边有容量限制 1 (每个柱子上最开始只有一只蜥蜴),其余地方没有容量限制,每个点的流量限制是柱子高度,于是把柱子拆成两个点,中间连柱子高度的边就可以了

    bzoj1070 修车

    同一时刻有 N 位车主带着他们的爱车来到了汽车维修中心。维修中心共有 M 位技术人员,不同的技术人员对不同
    的车进行维修所用的时间是不同的。现在需要安排这 M 位技术人员所维修的车及顺序,使得顾客平均等待的时间最
    小。 说明:顾客的等待时间是指从他把车送至维修中心到维修完毕所用的时间。

    sol:

    平均时间转化一下就是时间和

    考虑到对于每个技术人员,即时是同一个人,在不同时段用他,他需要的时间也是不同的,于是把 m 个人拆成 n*m 个人

    S 向车连流量 1 费用 0

    每个人向 T 连流量 1 费用 0 (同一时刻只能修一个车)

    每个车向所有人连流量 1 费用为 【等待时间】的边

    考虑等待时间怎么算,如果第 i 个人修的倒数第 k 个车是 j

    那他的时间就是 $k imes time_{(i,j)}$

    bzoj3876 支线剧情

    一个有边权的有向图,每次你可以从 1 号点开始走,走到不能走为止,要把每条边都至少走过一次,求走过的最小总路程

    sol:

    每条边的费用为边权,下界为 1,上界没有,求一下最小费用可行流即可

    bzoj2668 交换棋子

    有一个 $n$ 行 $m$ 列的黑白棋盘,你每次可以交换两个相邻格子(相邻是指有公共边或公共顶点)中的棋子,最终达到目标状态。要求第 $i$ 行第 $j$ 列的格子只能参与 $m_{(i,j)}$ 次交换。

    sol:

    用 $f_a$ 表示 $lfloor frac{m_{(i,j)}}{2} floor$

    用 $f_b$ 表示 $lceil frac{m_{(i,j)}}{2} ceil$

    因为我懒得打字

    这个题里有一个比较奇怪的东西叫做“参与交换”

    如果一个棋子换到了 x 位置,之后没动过,x 位置经历了一次“参与交换”

    如果一个棋子原来就在 x,走出去了,经历了一次

    如果穿过 x 位置,经历了两次

    这样的话建图就很明显了,可以把一个点拆成 3 个点 $(a,b,c)$

    其中 $a->b$ 表示走到 x,$b -> c$ 表示从 x 走出去

    一开始 S 向所有有棋子的点的 $b$ 连流量 1 费用 0,所有需要棋子的 $b$ 向 T 连流量 1 费用 0

    对于每一对相邻的点 $(x,y)$ 可以建一条 $x_c$ 向 $y_a$ 的边 ,流量 inf 费用 0

    对于一个点,如果它运出去了一个黑点,那就是 $a -> b$ 连一条 $f_b$,$b->c$ 连一条 $f_a$

    对于一个点,如果它接收到了一个黑点,那就是 $a -> b$ 连一条 $f_a$,$b->c$ 连一条 $f_b$

    对于一个点,如果它也没接收也没运,那就是 $a -> b$ 连一条 $f_a$,$b->c$ 连一条 $f_a$

    bzoj1834 网络扩容

    一个网络流的图,你可以花 $w_i$ 的代价将第 $i$ 条边的容量增加 1,求将最大流增加 $k$ 的最小费用

    sol:

    先做一遍最大流,把残量网络留着

    然后思考,怎么加 $k$ 呢?显然是搞一个新源 $S'$ ,向 $S$ 连一个容量为 $k$ 的边

    然后对于残量网络上每条边,新建一个跟它同向的边,流量 inf,费用 $w_i$,跑费用流就可以了

  • 相关阅读:
    冒泡排序&快速排序
    1252. Cells with Odd Values in a Matrix
    位运算小结
    832. Flipping an Image
    1812. Determine Color of a Chessboard Square
    10、属性、构造函数与析构函数
    09、封装与类成员
    07、面向对象简介
    06、C#异常处理
    03、运算符
  • 原文地址:https://www.cnblogs.com/Kong-Ruo/p/10118819.html
Copyright © 2011-2022 走看看