网络流 二分图 匹配问题
(入土)其实还好
scau_sleep(今天写bug了吗?
1.一个退役acmer,老年选手
2. 今天喝水了吗?
3. 会写暴力~比不会写强~比不会写优秀
4.不会三分,喜提铁牌。
5. 失败一次不算什么,胸针为了拯救真由里 和 助手。重来3000多次都可以,那我失败几次,又算什么。(命运石之门)
-------如果说这是命运石之门的意志的话
展开
-
kuangbin 网洛流 part1(有dinic和isap模板)
ACM Computer Factory POJ - 3436(点有限制拆点,边无限制)题意:有一个电脑的生产线,要你优化生产线。思路:对于每台机器都有一个生产量,QiQiQi。(把机器抽象成点,就是点有限制,要拆点)如果一台机器的输入 没有包含 “1”,那么就说明这台机器可以和源点SSS相连。(inf)如果一台机器的输出有一个零件不能生成,那么它就不能和汇点TTT相连。(inf)对于一个机器的输出是否可以传递到下一个机器的输入,这里要判断一下,是否要连边。(inf)最后就是按照最大原创 2020-07-29 23:14:23 · 201 阅读 · 0 评论 -
hdu4685 (找了10几篇都是一样,的普遍都没有std,那就自己写个std
#include <cstdio>#include <cstring>#include <vector>#include <algorithm>#include <cmath>#include <iostream>#define debug(a) cout<<#a<<":"<<a<<endl#define mst(x,a) memset(x,a,sizeof x)#defi原创 2021-10-11 01:26:01 · 123 阅读 · 0 评论 -
edu109代码
dp做法#include <iostream>#include <cstdio>#include <vector>#include <map>#include <unordered_map>#include <set>#include <algorithm>#include <queue>#include <string>#include <cmath>#includ原创 2021-05-16 23:05:24 · 90 阅读 · 0 评论 -
专题十 匹配问题 POJ 2289 Jamie‘s Contact Groups(二分答案+二分图多重匹配)
POJ 2289 Jamie’s Contact Groups题意:有一个通讯录,要求你把每个好友分组。有m个组 [0,m)[0,m)[0,m)每个好友的所能去的组有限制。使得每个好友都能分到一个组。求min(所有组中largest的人数)min(所有组中largest的人数)min(所有组中largest的人数)思路:最小值中的最大值。(很裸的二分)之后匹配,就是二分图多重匹配。反思:sstream的初始化。 stringstream ss; ss.str("")原创 2020-08-13 23:06:11 · 566 阅读 · 0 评论 -
专题十 匹配问题 POJ 2594 Treasure Exploration -----DAG最小相交路径覆盖(DAG二分图最大匹配+floyd传递闭包)
POJ 2594 Treasure Exploration题意:在一个DAG(有向无环图)里,求最小路径数点覆盖。(线路可以相交)反思:最小路径覆盖数=n−maxmatch最小路径覆盖数=n-maxmatch最小路径覆盖数=n−maxmatch相关证明1:传送门相关证明2:传送门思路1:先跑一遍floyd传递闭包。之后跑最大匹配。AC1#include <iostream>#include <cstring>#include <algorit原创 2020-08-13 16:05:17 · 159 阅读 · 0 评论 -
专题十 匹配问题 HDU 1054 Strategic Game(最小顶点覆盖or树形dp)
HDU 1054 Strategic Game题意:给你一个图,要求你放最少的点。使得这些点,都可以看到所有的边。思路1:最小顶点覆盖,即最大匹配AC1#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>#define mst(x,a) memset(x,a,sizeof(x))#define fzhead EDGE(int _to, in原创 2020-08-11 17:25:54 · 146 阅读 · 0 评论 -
专题10 匹配问题 POJ 3020 Antenna Placement(二分图最大匹配)
POJ 3020 Antenna Placement题意:给你一个图,里面的 * 表示 站点,要求把它们都连接起来,问最少所需要的antennas(电线)。一个antennas可以连接两个基站,要相邻。(特别地,也可以连一个空点)每个基站至少需要1个antenna。思路:建立无向图(先对于每个基站连边)。跑一遍最大匹配。之后可能还有一些没匹配到的点。那么这些每匹配的点,就ans++。(管他连到哪里,直接加一条antenna,即ans++)AC#include <iostr原创 2020-08-11 14:05:32 · 108 阅读 · 0 评论 -
[kuangbin带你飞]专题十 匹配问题 HDU-1038
Courses HDU - 1083题意:有p个课程,n个学生。问:是否存在一种匹配,使得每个课程都要有学生。(且不能有多余的学生)。思路:二分最大匹配。从课程出发去匹配学生反思:初始化别乱用。(mst就mst,其他算了ε=ε=ε=( ̄▽ ̄)) mst(head,-1);mst(vis,0);// for(int i=0; i<=p*n; i++)head[i]=-1,vis[i]=0;之所以wa是因为1*1的情况。对于题目求什么,那就从什么出发二分最大匹配原创 2020-08-07 23:53:54 · 126 阅读 · 1 评论 -
[kuangbin带你飞]专题十 匹配问题 HDU 4185(二分最大匹配)
HDU 4185 Oil Skimming题意:给你一个n x n的矩阵。要求找到最多的“##”(2x1)或者”#““#”(1x2)思路:证明:可以先把这个棋盘二分染色。(黑白相间的染色,就像国际象棋的棋盘)之后对于每个2 x 1的矩形,都必然含有一个黑和白的格子。这时候黑格子定义为左集合,白格子定义为右集合。求解:那么求1x2 或者 2 x 1的矩形的数目。 就是求黑格子与相邻白格的最大匹配。而对于有"#"的格子染色时可以标号,本题主要是连边。(本题邻接矩阵会爆内存),所原创 2020-08-05 00:35:08 · 156 阅读 · 0 评论 -
[kuangbin带你飞]专题10 匹配问题 HDU-2819(二分图最大匹配)
HDU 2819 Swap题意:给你一个n x n的01矩阵。可以行行交换,或者列列交换。问:怎样操作,可以使得矩阵的主对角线都为1.思路:先跑行列的二分图最大匹配。(可以摆棋子,且行列不冲突)跑完后就存答案了反思:跑行列的二分图最大匹配。(可以摆棋子,且行列不冲突)模板记得加used【j】=1;AC#include <iostream>#include <cstdio>#include <cstring>#include <原创 2020-08-04 21:12:54 · 120 阅读 · 0 评论 -
[kuangbin带你飞]专题10 匹配问题 HDU1281(二分图最大匹配)
HDU 1281 棋盘游戏题意:给你n*m的棋盘。有k个位置可以放车要求车不能互相攻击。问:怎样排放可以放最多的车。且求出重要位置。思路:对于行列,去二分匹配。之后就是求最大位置:可以删除这一条边,之后再跑一遍最大匹配。AC#include <iostream>#include <cstdio>#include <cstring>#define mst(x,a) memset(x,a,sizeof(x))using namespace原创 2020-08-04 20:11:11 · 97 阅读 · 0 评论 -
[kuangbin带你飞]专题十 匹配问题-POJ-2112(二分+网络流or多重最大匹配)
Optimal Milking POJ - 2112题意:有k个机器(产奶)。c头牛。每个机器最多可以接纳m头牛。给你牛机器之间的距离。问:怎样分配可以使牛都可以喝到奶,且走最远路的牛,所走的距离最短。思路:由于牛要走最短路,所以可以先floyd预处理。可以二分答案。由于问题是多重匹配,所以,这时候有两种思路。反思:一边多重,可以跑最大匹配。两边都是,那么就跑网络流吧。大佬的笔记传送门AC1(多重匹配,只适合一个集合多重)#include <iostream&原创 2020-08-02 17:11:30 · 162 阅读 · 0 评论 -
Cat VS Dog HDU - 3829(最大独立集)
Cat VS Dog HDU - 3829(二分图最大匹配)题意:有n只cat,m只dog。p个children。问:每个小孩有讨厌的,和喜欢的。怎样移除dislike的,可以使最多的children开心。思路:一开始想like连dislike,但假如有两个小孩的喜好是一样的,那么就麻烦了题目求小孩,那么连小孩好了。假如小孩之间有矛盾,那么就连一条边,之后求跑一遍max_match,求最大独立集,就可以了。反思:一开始连了like和dislikewa,后来边没连好wa了。ma原创 2020-08-01 23:35:34 · 109 阅读 · 0 评论 -
专题十 匹配问题 The Accomodation of Students HDU - 2444(染色&&二分图最大匹配)
The Accomodation of Students HDU - 2444(染色judge(二分图)&&二分图最大匹配)题意:有n个人。先给你m个朋友关系(关系不传递)问:是否可以把不是朋友的分成两个集合。如果可以,每次从两个集合中,各抽出一人去合宿。思路:问题1dfs染色或bfs染色就可以了。问题2二分图最大匹配即可。反思:染色有DFSDFSDFS和BFSBFSBFS(之前只知道DFSDFSDFS).二分图最大匹配时,无向图要加两句修改。(原创 2020-07-31 18:00:49 · 123 阅读 · 0 评论 -
Rain on your Parade HDU-2389 (Hopcroft-karp)
题意:有n个雨伞,有m个人。t min 后下雨。问最多有多少个人可以拿到雨伞(一把伞,只能有一个人)思路:裸的二分图最大匹配。把距离关系,转换一下,建图即可。AC#include<iostream>#include<string.h>#include<vector>#include<math.h>#include<queue>#define fzhead EDGE(int _to,int _next)#define.原创 2020-08-01 21:41:03 · 179 阅读 · 0 评论 -
专题十 匹配问题 HDU - 1045(匈牙利算法求-----二分图最大匹配)
Fire Net HDU - 1045题意:有一个矩阵。其中的棋子(为了方便叫棋子吧)不能同行同列。(除非中间有墙)问:最多放几个棋子。思路:缩点。跑最大二分图匹配。AC#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int maxn = 1010;int n ,cntx ,cnty ,cx[maxn] ,cy[maxn] ,t原创 2020-07-31 15:49:21 · 194 阅读 · 0 评论 -
Help Little Laura UVA - 1659(最大费用循环流--->转换为最小费用流)
Help Little Laura UVA - 1659看这里即可什么是最小费用循环流为什么正确+题解&&模板AC#include <iostream>#include <queue>#include <cstdio>#include <cstring>#include <vector>#include <cmath>#define mst(x, a) memset(x,a, sizeof(x))原创 2020-11-16 13:11:28 · 157 阅读 · 0 评论 -
Wrestling Match HDU - 5971(二分图染色)
Wrestling Match HDU - 5971 题意:有n个人,问是否能分成好人和坏人。(对于只有一个点的联通块无法确定,除非事先知道他是好人还是坏人)思路:就是二分图染色(dfs)先对好人dfs(假如只有一个点的联通块,那么就跳过)之后对坏人dfs(假如只有一个点的联通块,那么就跳过)最后对所有人dfs(假如只有一个点的联通块,无法判断,输出no)AC#include <iostream>#include <cstdio>#include <c原创 2020-10-16 12:41:08 · 129 阅读 · 0 评论 -
Divide Groups HDU - 4751(二分图染色)
Divide Groups HDU - 4751 题意:有n个人,第iii 个人认识一些人(可能互相认识)现在要你设计两场活动,使尽可能多的人互相认识思路:显然是二分图染色。本题有一个条件,就是已经认识的,就无关紧要了AC#include <iostream>#include <vector>#include <cstring>#define pb push_back#define mst(x,a) memset(x,a,sizeof(x))原创 2020-10-16 11:03:11 · 122 阅读 · 0 评论 -
Euler Circuit UVA - 10735(欧拉回路 + 网络流建模)
Euler Circuit UVA - 10735题意&&思路传送门1传送门2 (里面有讲什么是欧拉回路)AC#include <iostream>#include <queue>#include <cstring>#include <vector>#include <string>#include <cstdio>#include <algorithm>#include <st原创 2020-11-11 16:36:31 · 110 阅读 · 0 评论 -
Pool construction UVA - 1515(网络流 dinic 最小割)
Pool construction UVA - 1515 题意:输入一个h行w列的字符矩阵,草地用“#”表示,洞用“.”表示。你可以把草改成洞,每格花费为d,也可以把洞填上草,每格花费为f。组后还需要在草和洞之间修围栏,每条边的花费为b。整个矩阵第一行/列和最后一行/列必须都是草。求最小花费。2<=w,h<=50。1<=d,f,b<=10000。思路:围栏的作用是把草和洞隔开,让人联想到了“割”这个概念。可是“割”只是把图中的结点分成了两个部分,而本题中,草和洞都能有多个连通原创 2020-11-11 16:33:34 · 104 阅读 · 0 评论 -
Optimal Bus Route Design UVA - 1349(二分图--拆点 + 最小权完美匹配)
Optimal Bus Route Design UVA - 1349题意:给你n个点(n<=100)的有向带权图,找若干个有向圈,每个点恰好属于一个圈。要求权和尽量小。注意(u,v)和(v,u)都存在,它们的权值不一定相等。思路:(紫薯)每个点恰好属于一个有向圈,意味着每一个点都有一个唯一的后继。反过来,只要每个点都有唯一的后继,每个点一定属于一个圈。“每个东西恰好有唯一的。。。”让我们想到了二分图匹配。把每个点拆成两个。一个在x集合,一个在y集合。AC#include <iost原创 2020-11-10 22:50:43 · 139 阅读 · 0 评论 -
Admiral UVA - 1658(网络流拆点+最小费用流)
Admiral UVA - 1658题意:给你一个 有v个点的,有e条边的有向加权图,求 1-v 的两条不相交(除了起点和终点外)的路径,使得权和最小。思路:由于要限制,不相交,可以拆点,保证一个点只被经过一次。(除了终点以外)跑最小费用流,且流量为2.反思:一开始拆点的时候,连边的时候有一个逻辑错误。AC#include <iostream>#include <cstring>#include <algorithm>#include <原创 2020-11-10 22:42:24 · 132 阅读 · 0 评论 -
Matrix Decompressing UVA - 11082(把矩阵看成二分图,之后跑网络流)
Matrix Decompressing UVA - 11082题意:给你每行的和。和每一列的和。每一个格子最多是20.求:找到一种方案使得满足条件。思路:把行和列分成两个集合x和源点s相连(容量为sumr[i]−csum_r[i]-csumr[i]−c)y和汇点t相连(容量为sumc[i]−rsum_c[i]-rsumc[i]−r)每个x和每个y相连,容量为单点的限制。(这里连边时,可以存储边的编号,方便后面输出答案,靠读者尝试)反思:有一道升级版,希望读者可以学习一下。原创 2020-11-10 11:47:32 · 113 阅读 · 0 评论 -
A Plug for UNIX UVA - 753(网络流)
A Plug for UNIX UVA - 753 题意&&思路:基本和这道差不多传送门里的poj1087AC#include <iostream>#include <vector>#include <cstring>#include <queue>#include <cstdio>#include <map>#include <string>#include <algorithm原创 2020-11-10 11:40:37 · 88 阅读 · 0 评论 -
[kuangbin带你飞]专题10 ---POJ-3189(二分+多重匹配)
Steady Cow Assignment POJ - 3189题意:有b个牛舍,n头牛。每头牛对牛舍的喜爱程度不同。问:怎样分配可以使得牛的喜爱程度之差最小。思路:二分差值,之后枚举下界(牛舍只有20)之后建图,跑最大匹配。AC#include <iostream>#include <map>#include <string>#include <cstring>#include <cstdio>#define m原创 2020-08-04 16:06:01 · 188 阅读 · 0 评论 -
2020牛客暑期多校训练营(第八场)I-K(最近几天在神游qwq)
Interesting Computer Game题意:给你n组pair。每个pair只能选一个数。问:最后选完后,最多有多少个数。思路1:(并查集维护)。读入每个pair时,并起来。(并且计算这个联通块的边数和点数)对于一个x个点联通块,所有的点都取,的充分必要条件是有x条边 。反思1:对于并查集的维护,如果是联通块的特性,可以直接加减。(eg联通块的点数,联通块的边数)相反假如:是点的特性,则要向量(带权并查集)AC#include <iostream>#原创 2020-08-04 14:44:45 · 126 阅读 · 0 评论 -
kuangbin专题带你飞 十一网络流 hdu3416(最短路+最大流)
Marriage Match IV HDU - 3416题意:有n个城市。给你m条边。图为有向图。问你每次都走最短路,且走过的边不再走。可以到几次终点。思路:最短路+网络流。把最短路径上的边加入到网络流里。之后跑一遍最大流...原创 2020-07-29 22:35:13 · 177 阅读 · 0 评论 -
kaungbin专题十一 网络流HDU3081(Marriage match)(并查集维护+二分答案+网络流)
Marriage Match II HDU - 3081题意:有n个男生和n个女生,在玩过家家。每一轮都配对一对夫妻。限制:下一轮的配对时,两个男女在之前不能配对过。女生不会和quarrel过的人配对。女生只能和没有和朋友quarrel过的男生配对。思路:对于女生的朋友,用并查集维护。对于m里的每对,肯定没有quarrel的:g1和b1.把g1和g1的朋友都与b1连边。(边权为1)之后二分答案。mid为轮数。把源点和每个女生相连,边权为mid。把每个男生和汇点相原创 2020-07-29 21:36:35 · 162 阅读 · 0 评论