![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
网络流
qq_19275839
这个作者很懒,什么都没留下…
展开
-
UVALive 8275 网络流
把给定的每种相同的时间段成一个点,再把每一天抽象成一个点,每一天都与汇点连一条容量为0的边(以后需要扩张,所以一开始设为0)。 然后对于每个时间段,都对他对应的天连一条容量为INF的边。 然后这里需要用到一个mp数组,用来存储时间段对应的边的序号,mp[x][y]即为源点到 " 范围为x~y的区间代表的点 "的边的序号。对于每个人建立区间的时候,先看他对应的区间有没有被建立,如果没有的话...原创 2019-08-10 16:22:33 · 119 阅读 · 0 评论 -
POJ 1273 最大流
裸题,可以用vector储存邻接表来使代码变得简洁。 输入新的一组测试数据的时候要记得清空。 下为Dinic算法的代码。 #include <iostream> #include <stdio.h> #include <string.h> #include <math.h> #include <algorithm> #include &l...原创 2019-07-31 10:03:46 · 80 阅读 · 0 评论 -
POJ 3281 最大流
一道隐含的最大流问题。 首先,把每种food当作一个节点,与头部的s节点相连,每种drink当作一个节点,与结尾的t节点相连,这些路径的容量都为1(因为每种food或者drink只能选一次)。然后如果在中间为每头牛建立一个节点,连接它可以用的food以及drink然后直接跑最大流的话,就会有一个问题,比如牛a可以吃foodA与foodB,喝drinkA和drinkB,那么就会有两个流经过这头牛,那...原创 2019-07-31 20:35:54 · 86 阅读 · 0 评论 -
ZOJ 2760 网络流
首先注意一点,邻接矩阵对角线上的数据(如map[2][2],map[3][3])未必是0,非常坑。 首先求出最短路的长度(复杂度n2 或n3都可以),然后对于每条边,假设两个端点分别为a,b,如果起点到a的距离加上ab边长再加上b到终点的距离恰巧等于最短路的长度,则可以判断这条边在最短路上,我们便在网络流中加入这条边。把该加入的边都加入后跑一遍网络流即可。 #include<iostream...原创 2019-08-01 13:39:04 · 96 阅读 · 0 评论 -
POJ 1149 最大流
我们可以把每位客人当作节点建立网络流,猪圈中猪的数量便是对流量的限制。首先,如果一个客人第一次打开a猪圈,那我们就在起点s与这位客人之间连一条容量为猪圈a中初始值得边(因为他是第一个开这个猪圈的人,无法调配),对于后来的每个客人,如果他们也想打开猪圈a,就可以从第一位客人这里连一条容量为无穷大的边(因为第一次开猪圈之后就可以调配了),然后求最大流。 #include<iostream>...原创 2019-08-01 21:19:05 · 82 阅读 · 0 评论 -
POJ 3469 最小割
每个module都是一个节点,都有两条边,一条从s练到该节点,一条从该节点连到t,边的容量即为放在对应core上的代价。如果我们把这个module放在coreA上,就等价于隔断s到该节点的那条边,反之,如果放在coreB上,就等价于割掉该节点到t的那条边,如果两个module需要连载一起,不然要付出额外代价的话,我们就可以在这两个module之间也连一条边,如果他们两个一个与s相连,一个与t相连的...原创 2019-08-02 10:17:10 · 108 阅读 · 0 评论 -
POJ 2135 最小费用流
可以把每个点都当作一个节点,去一次再回来一次可以等价为从完全不同(没有共用边)的两条路径上走过去,所以如果两点之间有一条路的话,我们就为他添加两条边,一条正向一条反向(因为是无向图,即使只考虑去的情况也要加两条边,保证正反都可以走,但是事实上只会走一条边),容量设为1(只能走一遍),权值设为路的长度,然后从起点s到点1连一条边,容量为2,再从n节点到终点t连一条边,容量也为2,然后求最小费用流。 ...原创 2019-08-03 16:21:26 · 84 阅读 · 0 评论 -
POJ 3680 最小(大?)费用流
给的点数值比较大,不好直接建网络流,应该先离散化。 离散化之后,对于每个可以选的区间,我们都从左端点到右端点连一条容量为1(因为一个区间只能选一次),权值为-w(只要选择了这条边就能获得-w的权值,便于日后取最大)的边,然后对于1到m-1的每个点,都跟他后面的点连一条容量为k(最多可能叠加k层),权值为0(走这些边就说明什么都没选,也就没有权值)的边,然后从源点s到1连一条容量为k(还是限制叠加次...原创 2019-08-03 19:19:37 · 59 阅读 · 0 评论 -
LOJ 6008 网络流
一开始我在思考为什么不能直接从一天的开始连一条边到一天的结束,而要分别从源点和汇点连,后来我发现如果这样连的话,如果有一条被送去干洗的餐巾一定会导致总流量的减少,但是我们求的是最大流情况下的最小费用,所以要分别从源点与汇点连接。 详细的解释 #include <iostream> #include <math.h> #include <iomanip> #inc...原创 2019-08-05 10:12:52 · 121 阅读 · 0 评论