
二分图匹配
二分图匹配
gongyuandaye
不要再问我会不会写可持久化非确定状态AC自动分块维护线段平衡仙人掌优化最小费用最大流预处理混合图上莫比乌斯反演莫队带花舞蹈链并查集树状数组套主席树预处理动态DP分治FFT求多项式逆元对数函数的指数函数用可持久化并查集合并最小费用循环流上插头DP了。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
HDU 6808 Go Running (二分图最大匹配)
题意:无限长的轴,上面有人跑步,起跑时间和位置未知。给出n个报告,每次报告某时刻某点至少有一个人,求最少有几人在跑步。题解:二分图最大匹配线性关系不难发现,假设报告时刻为ttt,位置为xxx,那么相同的t+xt+xt+x或者t−xt-xt−x能够合并成一个人。但妹想到用二分图做。比如第一个样例,将ttt和xxx投影到坐标系中,其实就是求最少用多少条斜线(左或右)能将所有点包括。那么我们用map记录序号,将t+xt+xt+x(右斜线)和t−xt-xt−x(左斜线)相连,再用HK算法求一下最大匹配就好原创 2020-07-30 21:12:06 · 567 阅读 · 0 评论 -
2020牛客多校一 I. 1 or 2 (一般图匹配带花树+拆点)
题意:有一个n个点,m条边的图 ,给出每个点的度数,问是否可以成为该图的子图。题解:一般图匹配带花树跟 HDU3551 一模一样,不过这题比航电的数据弱。这篇题解写的很详细了我们需要拆点,包括点和边。比如对于边u -> v,我们将这条边分别拆成两个点1和2,再对点u的度deg[u]编号与1建双边,对点v的度deg[v]编号与2建双边。这是一般图,我们用带花树跑最大匹配,若是完美匹配则能成为子图。如何证明呢,最大匹配中 度的拆点 与 边的拆点 匹配时,同一边的另一个拆点也匹配到一个度的拆点原创 2020-07-17 18:06:50 · 298 阅读 · 0 评论 -
HDU 4685 Prince and Princess (二分图匹配+强连通分量)
题意:有n个王子和m个公主,每个王子都有若干个喜欢的公主,王子需要娶喜欢的公主,一个王子只能娶一个公主。输出对于每个王子,他可以娶的公主的编号的集合。王子娶这个集合的任一个公主,其他王子与公主的最大匹配数不变。题解:二分图匹配+强连通分量对于题目要求王子娶集合任意公主,最大匹配都不变,我们可以想到强连通分量,我们在分量内放入等量的能够任意匹配的王子和公主,这样无论王子选哪一个,其他王子也有的选。但是由于这题王子和公主的数量不等,我们可以引入虚拟结点,具体一点来说就是:在求完最大匹配后,对于未匹配的结点原创 2020-07-11 17:39:17 · 235 阅读 · 0 评论 -
[kuangbin带你飞]专题十:匹配问题
[kuangbin带你飞]专题十:匹配问题——题解报告HDU 1045 Fire NetHDU 2444 The Accomodation of StudentsHDU 1083 CoursesHDU 1281 棋盘游戏HDU 2819 SwapHDU 2389 Rain on your ParadeHDU 4185 Oil SkimmingPOJ 3020 Antenna PlacementHDU 1054 Strategic GameHDU 1151 Air RaidPOJ 2原创 2020-06-22 19:39:09 · 233 阅读 · 0 评论 -
HDU 4687 Boke and Tsukkomi (一般图匹配带花树)
题意:某场比赛,希望有效匹配数尽量多,在此条件下,输出题目给出组合中,无效匹配的边是哪些。题解:一般图匹配带花树先求一次最大匹配cntcntcnt是多少,然后遍历所有边,看删去该边上的两点(即带有这两个点的边都删除)最大匹配是否为cnt−1cnt - 1cnt−1,若是,则为有效匹配,若小于该值,则为无效匹配,删除。输出格式,pe一次,无效匹配可能为0,re一次…#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<原创 2020-06-22 19:14:44 · 249 阅读 · 0 评论 -
URAL 1099 Work Scheduling (一般图匹配带花树)
题意:给出n个士兵,再给出多组士兵之间两两可以匹配的关系。已知某个士兵最多只能与一个士兵匹配。求最多能够有多少对匹配,并输出这些匹配。题解:一般图匹配带花树一般图匹配,由于会有奇数环存在,所以用带花树来解决。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm&原创 2020-06-22 17:22:41 · 194 阅读 · 0 评论 -
HDU 3488 Tour (二分图最小权匹配——KM算法)
题意:给你一个n个顶点,m条边的带权有向图,要你把该图分成1个或多个不相交的有向环,且所有顶点都被有向环覆盖,问有向环所有权值的总和最小是多少。题解:二分图最小权匹配——KM算法有向环覆盖问题,对于一个二分图完美匹配,结果必然构成一个或多个不相交的环,因为每个点都作为起点和终点各出现一次。求权值总和最小,我们把权值取相反数,结果也是相反数。注意有重边。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdi原创 2020-06-22 11:03:36 · 529 阅读 · 0 评论 -
HDU 2255 奔小康赚大钱 (二分图最大权匹配——KM算法)
题意:村里共有n间房间,刚好有n家老百姓,每家必须分配到一间房子且只能得到一间房子。另一方面,村长和另外的村领导希望得到最大的效益,这样村里的机构才会有钱.由于老百姓都比较富裕,他们都能对每一间房子在他们的经济范围内出一定的价格,比如有3间房子,一家老百姓可以对第一间出10万,对第2间出2万,对第3间出20万.(当然是在他们的经济范围内).现在这个问题就是村领导怎样分配房子才能使收入最大.(村民即使有钱购买一间房子但不一定能买到,要看村领导分配的).题解:二分图最大权匹配——KM算法直接套板子。#de原创 2020-06-22 10:09:36 · 164 阅读 · 0 评论 -
POJ 3189 Steady Cow Assignment (二分+二分图多重匹配)
题意:有n头牛, 安排到m个棚里住。每头牛对每个棚都有一个好感度排名。主人为了使得这些牛尽可能满意,求获得最低好感度的牛和获得最高好感度的牛的最小好感度差值(即好感度跨度最小)。题解:二分+二分图多重匹配每头牛只能进一个棚,每个棚能容纳多头牛,二分图多重匹配问题。接下来二分枚举好感度区间,根据区间确定牛和棚之间的连线,然后跑多重匹配即可。还有就是算最大多重匹配的时候,由于要让所有牛都有棚,若当前区间无法满足这头牛,直接break,会省好多时间。#define _CRT_SECURE_NO_WARN原创 2020-06-21 18:49:51 · 248 阅读 · 0 评论 -
POJ 2112 Optimal Milking (floyd+二分+二分图多重匹配)
题意:k个挤奶器,c头奶牛,每个挤奶器可供m头奶牛使用,k+c的矩阵给出挤奶器和奶牛到彼此的距离,前k行是挤奶器,k+1到k+c行是奶牛。求在保证每头牛都能挤到奶的情况下,离得最远的牛的最小距离。题解:floyd+二分+二分图多重匹配首先得用floyd求一下最短路,保证奶牛距离挤奶器保存的是最短距离。奶牛只能去一个挤奶器,每个挤奶器能让多个奶牛挤奶,二分图多重匹配问题。接下来我们要限制最远的牛的最小距离,求最大值的最小值,我们用二分,这里限制距离,将二分距离内的奶牛与挤奶器相连。吐了,wa了半天居然原创 2020-06-21 17:07:24 · 228 阅读 · 0 评论 -
POJ 2289 Jamie’s Contact Groups (二分+二分图多重匹配)
题意:给定一个规模为n的名单,要将名单中的人归到m个组中,给出每个人可能的分组号,需要确定一种分配方案,使得最大规模的组最小。题解:二分+二分图多重匹配每个组可以有多个人,每个人只能选一个组,很显然的二分图多重匹配,最大流也可以,但没有二分图简单。由于n个人都要进入m个组,且最大规模的组要最小,那么我们二分限制条件,即限制每个组的最大人数,找到最大匹配为n且最大规模组最小的答案。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#inc原创 2020-06-21 15:12:41 · 372 阅读 · 0 评论 -
HDU 3829 Cat VS Dog (最大独立集)
题意:分别给出n个孩子喜欢的一只动物和一只不喜欢的动物,只有孩子不喜欢的动物被删掉了,孩子才会高兴,求最多能让多少个孩子高兴。题解:最大独立集最大独立集:从无向图中的顶点中选出k个并且k个顶点之间互不相邻,最大的k就是最大独立集。这道题目里最大独立集的意思是,两个孩子之间的兴趣矛盾(A喜欢的是B不喜欢的,且A不喜欢的是B喜欢的),我们就把他们建双边,由于是无向图,答案就是n-最大匹配 / 2。#define _CRT_SECURE_NO_WARNINGS#include<iostream&g原创 2020-06-20 21:03:16 · 197 阅读 · 0 评论 -
POJ 2594 Treasure Exploration (传递闭包+二分图匹配)
题意:n个点,m条有向边,机器人可以沿着一条路径一直走下去,问最少需要多少个机器人可以走完所有点。每一条路径上不能有重复点,但是不同路径上可以有重复点。题解:传递闭包+二分图匹配最小路径覆盖是用最少的不相交的简单路径去覆盖有向无环图的所有结点,而这里是可以相交的。我们用类似floyd的方法去求传递闭包,增加一些边使得两条相交路径的所有结点可以用两条不相交路径的所有结点表示。举个例子,1->2->3和4->2->5构成一个十字,若不增加边,则答案为5-2=3,实际我们知道是2。原创 2020-06-20 20:25:59 · 214 阅读 · 0 评论 -
HDU 1151 Air Raid (二分图匹配)
题意:一个城镇有n个路口,由一些单向马路连接。现在要安排一些伞兵降落在某些路口上,清查所有的路口。一个伞兵可以沿着马路一路清查过去。清查过程中不能有两个伞兵同时清查一个路口。给定城镇的线路,求最少需要几个伞兵就能清查所有的路口。题解:二分图匹配注意单向连接,n-最大匹配就是要求的最小路径匹配。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#in原创 2020-06-20 12:00:53 · 196 阅读 · 0 评论 -
HDU 1054 Strategic Game (二分图匹配)
题意:给出一张图,要求最小顶点覆盖,即选出最少的点,让每条边都至少与一个选出的点关联。题解:二分图匹配根据输入建边,跑出的最大匹配 / 2就是答案,因为最大匹配就是选出没有公共点的最大边数,那么剩余边必然跟选出的关联(相邻)。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<a原创 2020-06-20 11:41:33 · 230 阅读 · 0 评论 -
POJ 3020 Antenna Placement (二分图匹配)
题意:‘*’代表城市, 'o’代表空地,要用最少的无线电雷达来覆盖所有的城市,雷达只可以建立在城市上,每一个雷达,只可以覆盖它自己所在的位置和与它相邻的一个位置。题解:二分图匹配跟这题差不多,一开始思路一样,编号建无向图,求出最少的不重叠覆盖的雷达个数hungary() / 2,然后加上剩余点数就是答案,因为必然剩余点数周围没有其他“*”。tot - 2 * hungary() / 2就是剩余点数,加上之后等于tot - hungary() / 2。#define _CRT_SECURE_NO_WA原创 2020-06-19 21:32:14 · 207 阅读 · 0 评论 -
HDU 4185 Oil Skimming (二分图匹配)
题意:给定一张n*n的图,求不重复的两个相邻“#”有多少组。题解:二分图匹配对于点“#”进行编号,遍历的时候若当前字符是“#”,与它上下左右是“#”的建边,由于是无向图,跑出的最大匹配 / 2就是答案。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>原创 2020-06-19 20:39:49 · 212 阅读 · 0 评论 -
HDU 2389 Rain on your Parade (二分图匹配)
题意:天马上就要下雨了,然后有n个人,m把伞,然后分别给出人的坐标和他们跑的速度,以及伞的坐标,然后问在t时间内,最多能有多少人拿到伞。题解:二分图匹配之前做过一道类似的题目,是用最大流做的,但这道题n和m都是3000,用匈牙利和ISAP都会超时,直接上HK算法。以后类似的题目都用二分图来做吧。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#原创 2020-06-19 12:01:36 · 232 阅读 · 0 评论 -
HDU 2819 Swap (二分图匹配)
题意:给定一个n*n的矩阵,格子数字0或者1,通过交换两行或两列使对角线都是1。若不能,输出-1;若可以,输出交换次数,并且输出交换的行或者列。题解:二分图匹配对于数字为1的点(i,j)(i, j)(i,j),将行号与列号相连,表示这行、列上只能有这一个点(数字1),若跑出的最大匹配是n,即n个1都不在相同行或列上,则表示通过交换能到达对角线都是1的情况。然后我们通过linker[]linker[]linker[]数组,遍历找到对应的行号,由于行列交换等价,只要记录列交换即可。具体见代码注释。#de原创 2020-06-19 10:49:47 · 203 阅读 · 0 评论 -
HDU 1281 棋盘游戏 (二分图匹配)
题意:对一个N*M的棋盘,在格子里放尽量多的一些国际象棋里面的“车”,并且使得他们不能互相攻击,Gardon限制了只有某些格子才可以放,注意不能放车的地方不影响车的互相攻击。在保证尽量多的“车”的前提下,棋盘里有些格子是可以避开的,也就是说,不在这些格子上放车,也可以保证尽量多的“车”被放下。但是某些格子若不放子,就无法保证放尽量多的“车”,这样的格子被称做重要点。算出有多少个这样的重要点?题解:二分图匹配注意题目说不能放车的地方不影响车的互相攻击,也就是对于给出的能放的点(i,j)(i, j)(i,原创 2020-06-18 20:59:03 · 228 阅读 · 0 评论 -
HDU 2444 The Accomodation of Students (判断二分图+二分图匹配)
题意:n个人,给出m对关系表示两人认识,现将他们分成两组,使得组内两两都不认识,若不能分成两组,输出No;若能,求两组之间最大互相认识对数。题解:判断二分图+二分图匹配首先这是一个无向图,对于无向图能否成为二分图,只要判断奇数环就可以了,即环的边数为偶数,则为二分图;若为奇数,则不是。判断的过程我们采用染色法。接下来用匈牙利算法求最大匹配就可以了。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio&g原创 2020-06-18 20:09:20 · 185 阅读 · 0 评论 -
HDU 1045 Fire Net (二分图匹配)
题意:给出n*n的图,要在空白格内填小圆圈,圆圈两两之间不能在同一行、列,除非有黑格子挡住,求最多填多少个圆圈。题解:二分图匹配对每一行、列能填的连续白格子整体编号,分别用lx[i][j]、ly[i][j]lx[i][j]、ly[i][j]lx[i][j]、ly[i][j]表示。对于点(i,j)(i, j)(i,j),将lx[i][j]lx[i][j]lx[i][j]与ly[i][j]ly[i][j]ly[i][j]建边,表示这一行、一列,都只能有这一个点(圆圈),跑匈牙利算法求出的最大匹配就是能放原创 2020-06-18 16:59:54 · 216 阅读 · 0 评论 -
HDU 3081 Marriage Match II (并查集+二分+最大流 | 并查集+二分图匹配)
题意:n 个男生、n个女生玩游戏,每个女生都可以和她不讨厌的男生结婚,此外她的朋友如果也不讨厌这个男生,也可以和他结婚;对于女生,如果A和B是朋友,B和C是朋友,那么A和C也是朋友。每次游戏女生会找一个她不讨厌的男生结婚,如果所有女生匹配成功,则进行下一轮游戏。每个女生只能选择同一个男生一次,问游戏最多能进行几轮。题解:并查集+二分+最大流 | 并查集+二分图匹配二分图解法等刷匹配专题再补。对于女生的朋友之间的相互性,我们可以想到并查集,以达到只在女生一列和男生一列之间连线的目的。男女之间连线的做法原创 2020-06-17 20:06:00 · 219 阅读 · 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 · 216 阅读 · 0 评论 -
HDU 1083 Courses (二分图匹配)
题意:p门课,n个学生,每门课都有一些学生感兴趣,求是否能使课和学生形成完美匹配。题解:二分图匹配用匈牙利算法就可以过。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<queue>#include<stack&原创 2020-05-30 16:45:30 · 177 阅读 · 0 评论 -
LightOJ 1356 Prime Independence (素数+二分图)
题意:选出一个最大子集,其中任意两个数a、b不能满足a=素数*b。题解:素数+二分图最大独立子集问题。先将所有素数存进vv,再对所有数的素数倍数建边。建双边,建边的时候用编号,即每个数与集合中它的素数倍建双边,最后除以2即是最大匹配,再用n减去就是最大独立子集。注意用HK,不然tle。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#inc原创 2020-05-16 16:51:51 · 236 阅读 · 0 评论