
o(* ̄︶ ̄*)o网络流
美团外卖
乘风破浪
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
hihoCoder1378最大流最小割定理
传送门 链接里有详细的对于最大流最小割定理的讲解。 题意:要求所给图的最小割和最小割容量,以及最小割S集的点。题解:跑一遍最大流,然后对残量网络进行一次搜索,统计和记录点就好了。#include<bits/stdc++.h> using namespace std; const int maxn=505; const int inf=0x7fffffff;int r[maxn][maxn],cn原创 2017-10-08 20:46:49 · 287 阅读 · 0 评论 -
hdu5889(最大流+最短路)
传送门题解:给一幅图,在这幅图的最短路上求最大流。先跑一边最短路,然后将最短路上的边建图,跑一边最大流就好了。 建图我是用dist[u] + 1 ==dist[v]来判断他是不是最短路上的边的。(弱智WA了一发。强行另存了一次边,然后强制将最短路上点标号小的向点标号大的建边。)#include<bits/stdc++.h> using namespace std; const int MAXN=1原创 2017-10-11 20:38:38 · 461 阅读 · 0 评论 -
HDU1533(网络流)
题意:给你一幅图,里面得m代表人,H代表房子,问所有人都到达房子需要花多少步。题解:看到这个题我立刻想起了POJ3057,不过这个题没有时间,只是求花多少步。相较之下简单一点,那就可以对每个人来说,对每个房子建一条容量为1,花费为距离的边,然后超级源点S到每个人建容量为1花费为0的边,每个房子对超级汇点建容量为1花费为0的边,跑一边费用流就好了。#include<bits/stdc++.h> usi原创 2017-10-18 15:09:58 · 370 阅读 · 0 评论 -
hdu5988(网络流)
链接题意:一个网络流的图,有n个点,从1~n,然后m条边,每个点有两个值,一个是人的数量一个是饭的数量。每条边有容量,还有走上去可能踩断电线的几率。问让所有人吃到饭的前提下断电线的最小概率是多少。 题解: 踩断电线的最小概率就是1-没踩断电线的最大概率。那就可以把一条路上的所有可能性乘起来就好,最小费用流没法处理乘法,就要取对数。要求最大概率就可以取相反数求费用流。求最短路的时候松弛要用eps。原创 2017-10-17 20:44:18 · 334 阅读 · 0 评论 -
POJ3057(二分图匹配)
题意: 有一个X*Y的房间,‘X’代表墙壁,‘D’是门,‘.’代表人。这个房间着火了,人要跑出去,但是每一个时间点只有一个人可以从门出去。 问最后一个人逃出去的最短时间,如果不能逃出去,输出impossible。 题解: 对每个门进行bfs,算每个人到达这个门的时间,看在时间t内所有人能否逃出去。如果不能,时间t就+1.检验所有人能否逃出去就看时间与门的二元组与人所组成的二分图的最大匹配数与原创 2017-10-15 14:58:07 · 613 阅读 · 0 评论 -
POJ3041(二分图匹配)
题意:在N*N的网格中有K个小行星,已知行星位置,然后依次消除一行或者一列的小行星,消除所有小行星需要多少次?题解:根据每一个行星的位置,(x,y),就将x,y+n之间建边,建边之后对应图为:这里的边代表是行星,这里左边的点是代表一行,右边的点代表一列,选择了u1则代表u1-v1和u1-v3的点全部被消除掉,那么问题就转换成了最小顶点覆盖。 最小顶点覆盖是NP问题,不过这是在二分图中,所以最小顶点原创 2017-10-12 21:23:06 · 306 阅读 · 0 评论 -
网络流之最大流学习笔记
学了一天加上问师哥才勉强弄明白了网络流。(我真的好菜啊。。) 写个博客记录一下方便以后复习。定义部分:V是图中所有点的集合。 E是所有边的集合。G=(V,E)表示整个图。s表示源点,t表示汇点。 对于每条边(u,v),有一个容量c(u,v) (c(u,v)>=0),如果c(u,v)=0,则表示(u,v)不存在在网络中。相反,如果原网络中不存在边(u,v),则令c(u,v)=0. 对于每条原创 2017-08-15 10:23:25 · 392 阅读 · 0 评论 -
HDU3572(最大流)
题意:有n个任务,m台机器,每个任务有完成需要天数p,开始时间s和截止时间e。每台机器每天只能处理一个任务。问能否将所有任务完成。题解:一开始想麻烦了。做了半天。 只需要将源点与任务I之间连一条容量为P的边,然后把每一天作为一个点,每个任务向它对应的S~E连一条容量为1的边,每一天向汇点连一条容量为m的边跑最大流就可以了。#include<bits/stdc++.h> using namespac原创 2017-10-18 20:37:42 · 624 阅读 · 0 评论 -
poj3281 最大流
题目题意:有N头奶牛,有F种食物,D种饮料,每头奶牛有自己喜欢的食物和饮料。问能让多少头奶牛满意。题解: 画出图来这个题就简单很多了。 样例: (嘿嘿,food和cow以及cow和drink之间的太多了就没画) 把食物标号+100存下来,奶牛本身不变,但是要再加上一列奶牛标号+200(为了保证每头奶牛只被使用1次)然后饮料+300,然后从0-505找最大流。#include<cstdio原创 2017-08-31 20:30:15 · 211 阅读 · 0 评论 -
hdu2063(二分图匹配 匈牙利算法模板题)
存一下模板#include<bits/stdc++.h> using namespace std;const int maxn=505; int G[maxn][maxn],vis[maxn],pre[maxn]; int k,m,n,temp1,temp2,sum;bool found(int x) { for (int i = 1;i <= n;i++) { if原创 2017-09-03 19:56:22 · 250 阅读 · 0 评论 -
hihocoder1393(二分图多重匹配)
题目是一个裸地二分图多重匹配,但是做法十分粗糙,强行遍历了0-500,如果是普通的方法会TLE,用了ISAP实现。晚一些改一下。 感觉多重匹配和最大匹配的差别在于一个点能否使用多次。也就是边权是否为1。(但是感觉有什么地方不大对)#include<bits/stdc++.h> using namespace std; const int MAXN = 100010;//点数的最大值 const i原创 2017-09-05 14:35:21 · 245 阅读 · 0 评论 -
hdu6214(求最小割最少边数)
题目好像是和hdu3987差不多的?传送门有两种方法: 1、对于所有容量值扩大(边数+1)倍然后+1,跑一边最大流得到的MAXFLOW/(边数+1)即为最大流,MAXFLOW%(边数+1)即最小割的边数。 (强行解释一波:我们可以将这个图里额外加的1作为最后计算,也就是如果最后某条增广路的1被拿走了那这就是最小割边之一) 2、跑一边最大流,然后把残量网络里的容量为0的边改为1,其他的边的容量改原创 2017-09-19 20:46:46 · 965 阅读 · 0 评论 -
hdu3987(最小割最小边数)
题目题解:与hdu6214基本相同 传送门题解:#include<bits/stdc++.h> using namespace std; const int MAXN = 100010;//点数的最大值 const int MAXM = 400010;//边数的最大值 const int INF = 0x3f3f3f3f; #define ll long long struct Edge {原创 2017-09-19 20:59:46 · 447 阅读 · 0 评论 -
POJ3020(最小路径覆盖)
题目链接 这题意是真的醉了,强行增加难度。(六级没过的人的泪水。) 题意: 给你一个图,*代表城市,圆圈代表空地,要用什么发射器覆盖所有城市,一个发射器可以覆盖两个城市(上下左右)。问最少需要多少个发射器。 题解: 可以先对图上所有城市进行编号,记下城市数量mount,然后搜索整个图,对于一个城市可以与他上下左右的城市建边。这样建图就完成了。跑一个二分图匹配。然后答案就是mount - ...原创 2018-03-29 20:57:56 · 218 阅读 · 0 评论