随笔分类 -  图论——费用流

摘要:题意: 在一个$100 100$的方格中,要求从$b$走到$g$,途中经过$c$但不经过$u$,并且不能走已经做过的路。如果可以,就求出路径。 思路: 拆点建费用流,看能不能从$c$走两条路走到$b,g$。然后输出路径。 代码: cpp include include include include 阅读全文
posted @ 2019-09-29 19:12 KirinSB 阅读(222) 评论(0) 推荐(0)
摘要:题意: 有$n$个数$a_1\cdots a_n$,现要你给出$k$个不相交的非降子序列,使得和最大。 思路: 费用流建图,每个点拆点,费用为$ a[i]$,然后和源点连边,和后面非降的数连边,源点和超级源点连一条容量$k$的边,跑费用流。 用$spfa$费用流$TLE$,这里因为不会出现负环,所以 阅读全文
posted @ 2019-08-03 10:42 KirinSB 阅读(384) 评论(1) 推荐(0)
摘要:题意:小A从左上角走到右下角,每个格子都有一个价值,经过这个格子就把价值拿走,每次只能往下或往右走,问你走k次最多能拿多少价值的东西。 思路:这里有一个限制条件就是经过之后要把东西拿走,也就是每一格的价值只能拿一次,这也能用拆点。我们把一个点拆成两个,建两条边,一条流量1费用-cost,另一条流量k 阅读全文
posted @ 2018-07-25 09:56 KirinSB 阅读(104) 评论(0) 推荐(0)
摘要:题意:给一个n*m的方格,每个格子上都有一个数字表示价值,小A在左上角,他从左上角走到右下角只能向右或向下走,然后再从右下角走上左上角,这次只能向上或向左走,这两条路绝对没有重复,问你怎样走有最大价值。思路:因为不能重复,就拆点。拆点是这样的,把一个点拆成一条边,每条... 阅读全文
posted @ 2018-07-24 18:38 KirinSB 阅读(223) 评论(0) 推荐(0)
摘要:题意:有n个机器,机器之间有m条连线,我们需要判断机器0到n-1是否存在两条线路,存在输出最小费用。 思路:我们把0连接超级源点,n-1连接超级汇点,两者流量都设为2,其他流量设为1,那么只要最后我们能找到超级汇点和超级源点的流量为2就说明有两条路,输出最小值。 代码: 阅读全文
posted @ 2018-07-24 09:29 KirinSB 阅读(104) 评论(0) 推荐(0)
摘要:题意:给你一张图,有k个人和k个房子,每个房子只能住一个人,每个人到某一房子的花费为曼哈顿距离,问你让k个人怎么走,使他们都住房子且花费最小。 思路:我们把所有人和超级源点相连,流量为1花费为0,所有房子和超级汇点相连,流量为1花费为0,然后把所有人和所有房子加边,流量为1,花费为曼哈顿距离,这样这 阅读全文
posted @ 2018-07-23 19:30 KirinSB 阅读(117) 评论(0) 推荐(0)