网络流
网络流
gongyuandaye
不要再问我会不会写可持久化非确定状态AC自动分块维护线段平衡仙人掌优化最小费用最大流预处理混合图上莫比乌斯反演莫队带花舞蹈链并查集树状数组套主席树预处理动态DP分治FFT求多项式逆元对数函数的指数函数用可持久化并查集合并最小费用循环流上插头DP了。
展开
-
[kuangbin带你飞]专题十一:网络流
[kuangbin带你飞]专题十一:网络流——题解报告POJ 3436 ACM Computer Factory.POJ 3281 DiningPOJ 1087 A Plug for UNIXPOJ 2195 Going HomePOJ 2516 Minimum CostPOJ 1459 Power NetworkHDU 4280 Island TransportHDU 4292 FoodHDU 4289 ControlUVA 10480 SabotageHDU 2732 Leap原创 2020-06-18 15:33:55 · 171 阅读 · 0 评论 -
HDU 3416 Marriage Match IV (dijkstra+最大流)
题意:给出n个点,m条边,给出起点、终点,求不重叠的最短路有多少条(点可以重叠)。题解:dijkstra+最大流要求最短路条数,肯定得先把所有最短路找出来:d1[u[i]] + w[i] + d2[v[i]] == d1[end],边iii就是所有最短路中的一条。我们将找出的边iii加入最大流的图中,跑出的最大流就是最短路条数。一开始t了,看discuss原来是sap的数组开小了,因为题目有重边。#define _CRT_SECURE_NO_WARNINGS#include<iostre原创 2020-06-17 21:20:14 · 147 阅读 · 0 评论 -
HDU 3081 Marriage Match II (并查集+二分+最大流 | 并查集+二分图匹配)
题意:n 个男生、n个女生玩游戏,每个女生都可以和她不讨厌的男生结婚,此外她的朋友如果也不讨厌这个男生,也可以和他结婚;对于女生,如果A和B是朋友,B和C是朋友,那么A和C也是朋友。每次游戏女生会找一个她不讨厌的男生结婚,如果所有女生匹配成功,则进行下一轮游戏。每个女生只能选择同一个男生一次,问游戏最多能进行几轮。题解:并查集+二分+最大流 | 并查集+二分图匹配二分图解法等刷匹配专题再补。对于女生的朋友之间的相互性,我们可以想到并查集,以达到只在女生一列和男生一列之间连线的目的。男女之间连线的做法原创 2020-06-17 20:06:00 · 186 阅读 · 0 评论 -
HDU 3605 Escape (状压+最大流 | 二分图多重匹配)
题意:n个人,m个星球,每个人给出对哪些星球感兴趣,每个星球给出能住的人数,求能否让所有人都住上感兴趣的星球。More set of test data, the beginning of each data is n (1 <= n <= 100000), m (1 <= m <= 10) n indicate there n people on the earth, m representatives m planet, planet and people labels ar原创 2020-06-17 17:10:43 · 184 阅读 · 0 评论 -
HDU 3338 Kakuro Extension (最大流)
题意:网格图,有黑色格子和白色格子,白色格子用来填空,填的值的范围是1-9,每个黑色格子可能存在两个量,a\b,a表示向下连续白色格子的和,b表示向右连续白色格子的和,题目要求就一组任意解并且输出。题解:最大流我们发现,所有行和等于所有列和,那么可以从行流入,从列流出,构造最大流。我们可以将行看作一个点,这行有多少个白格子,表示有多少条流出的边,列同理,表示流入。由此将行、列顺序编号,进行建边。由于流量有上下限限制,可以给每个数都减掉1,则填出来的数字范围为0-8, 就可以用网络流搞定了。所以行、原创 2020-06-17 15:53:07 · 158 阅读 · 0 评论 -
HDU 2732 Leapin’ Lizards (最大流)
题意:一张网格图,有N个柱子,有些柱子上有蜥蜴,有的没有,每只蜥蜴一次最多跳d距离,一个柱子只能被跳有限次,问最后有几只蜥蜴跳不出来网格。题解:最大流拆点,将每个点拆成进来和出去两个。因为这里是每个点有流量,这个很关键。对于每一个柱子(i,j),id=(i−1)∗col+j(i,j),id = (i - 1) * col + j(i,j),id=(i−1)∗col+j:①maze[id][id + row * col] = 能跳的次数,表示跳出去。②maze[id + row * col][T]原创 2020-06-16 22:40:02 · 199 阅读 · 1 评论 -
UVA 10480 Sabotage (最大流最小割)
题意:给出n个点,m条边的图,每条边给出清除所需要的代价,起点是1,终点是2,求花费最小的代价清除一些边,使得无法从1走到2。题解:最大流最小割看题目意思,就是求最小割,我们用最大流来求。因为要将清除的边打印出来,其实就是求残余网络中:一个方向还残余容量,另一个方向没有容量的边,但并不是所有这样的边都可以成为割边(wa了),我们用a[]a[]a[]在求最大流的时候另外记录。以后求割边就用这个板子了,只要最大流的话就用这个。#define _CRT_SECURE_NO_WARNINGS#inclu原创 2020-06-16 17:04:22 · 218 阅读 · 0 评论 -
HDU 4289 Control (最大流最小割)
题意:给一个无向图,有些不法分子要从S点T点,现在要抓住所有的不法分子阻止他们去T,那么就要控制某一些城市等待他们,控制每个城市花费不同,问最少花费是多少。题解:最大流#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<queue原创 2020-06-15 22:16:42 · 176 阅读 · 0 评论 -
HDU 4292 FOOD (最大流)
题意:n个人,f种食物,d种饮料,给出食物和饮料数量,以及每个人的喜好,求让人满意的最大人数。题解:最大流人数要最多,那么每个人只能吃一种食物和饮料。跟这题一样,拆点,只不过多了食物和饮料的数量。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#原创 2020-06-15 21:02:49 · 205 阅读 · 0 评论 -
HDU 4280 Island Transport (最大流)
题意:给出n个点坐标,m条双向路线,每条路线给出一小时能运送的乘客数量,起点是最左边的点,终点是最右边的点,求一小时最大运客量。题解:最大流注意是双向路线,ISAP居然也卡,用了bfs初始化+栈优化才过。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>原创 2020-06-15 20:33:48 · 146 阅读 · 0 评论 -
POJ 1459 Power Network (最大流)
题意:n个结点,np个发电站,nc个消费者,m个电力运输线。接下去是m条边的信息(u,v)cost,cost表示边(u,v)的最大流量;np个发电站的信息(u)cost,cost表示发电站u能提供的最大流量;nc个用户的信息(v)cost,cost表示每个用户v能接受的最大流量。求最大流。题解:最大流按照题目意思建边就可以了,注意输入,结点是从0开始标号的。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstd原创 2020-06-14 15:37:48 · 203 阅读 · 0 评论 -
POJ 2510 Minimum Cost (最小费用最大流)
题意:有 n 个商店,k种物品和 m 个供货商,让你求进满足商店需求的货物的最小花费。首先n, m, k然后是一个n * k的矩阵,n个商店对每种货物的需求,表示第 i 个商店需要第 j 种货物 x个然后是m * k 的矩阵,m个供货商可以供k种货物的数量,表示第 i 个供货商提供第 j 种货物 x 个接下来是 k 个 n * m 的矩阵,表示第 i 个货物,由 p 供应商发货给 j 商店的价格x题解:最小费用最大流如果按照源点->商店->物品->供应商->汇点建图,原创 2020-06-14 14:45:28 · 184 阅读 · 0 评论 -
POJ 2195 Going Home (最小费用最大流)
题意:给出一张n*m的图,有k个人、k间房子,求使得每个人都走进房子的最短总路程。题解:最小费用最大流按照源点->房子->人->汇点建图,房子到人之间的费用,就是两两之间的曼哈顿距离,容量都是1。这里用的spfa。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#include<cstring>#include&原创 2020-06-14 12:41:40 · 243 阅读 · 0 评论 -
POJ 1087 A Plug for UNIX (最大流)
题意:n个插座(字符串表示),m个插头(字符串表示),k种转换器,转换器有无数个,可以将插头s2转换为s1,求最少多少个插头不能插上插座。题解:最大流我们将插座和插头都视作同一字符串,用map表示,即能插上就直接插上,不再建边,差别体现在与源点还是汇点相连。①将源点0与插座建边,权值为1。②将汇点num+1与插头建边,权值++,因为插头可能相等。num表示总的点,所以要等所有边建好后,再将插头与汇点建边。③将转换器建边,因为可以将插头s2转换为s1,相当于s1->s2。这里用的sap。用字原创 2020-06-13 22:21:46 · 147 阅读 · 0 评论 -
POJ 3281 Dining (最大流)
题意:n头奶牛,f个食物,d个饮料,当一个食物或饮料被奶牛吃掉后,不能再被其他奶牛吃掉,每头奶牛都有喜欢的食物、饮料,求吃掉喜欢的食物和饮料的最多奶牛数量。题解:最大流要是只有食物,就可以用二分图匹配了。这里用最大流的方式很巧妙,从源点->食物->奶牛->饮料->汇点,这样建边,最大流就是答案,但是奶牛只能吃一种食物或饮料,单单这样建边奶牛会吃掉其他的。我们在食物和饮料之间再放一组奶牛,即源点->食物->奶牛->奶牛->饮料->汇点,这样也就避免原创 2020-06-13 19:48:37 · 216 阅读 · 0 评论 -
POJ 3436 ACM Computer Factory (最大流)
题意:p个零件,n台机器,每台机器能生产num个零件组合,并给出每台机器的生产条件:p个数,分别代表每个零件的情况,0:不需要,1:需要,2:随便;以及生产结果:p个数,0:无,1:有。求最多能生产多少台电脑(包含所有零件),以及机器之间的协作情况。题解:最大流机器之间的协作情况,就是从上一台机器的生产结果,能否成为下一台机器的生产条件,即相等。我们可以遍历,然后建图,跑最大流。源点就是000(0),遍历,找生产条件是源点的,建边。汇点就是111(n+1),遍历,找生产结果是汇点的,建边。这里用的原创 2020-06-13 16:37:37 · 160 阅读 · 0 评论