二分图
Icefox_zhx
这个作者很懒,什么都没留下…
展开
-
bzoj1433 [ZJOI2009]假期的宿舍(最大流/二分图最大匹配)
S向所有需要床的人建边,所有床向T建边,i认识j,i向j的床建边,每个人向自己的床建边,跑dinic,看是否所有需要床的人都有床了。为什么要把人和床分开建呢?因为a认识b,b认识c,a不认识c的话,a并不能睡在c的床上。如果只建一个人,就会出现问题。原创 2017-11-24 13:34:52 · 386 阅读 · 0 评论 -
bzoj4514 [Sdoi2016]数字配对(数学+费用流)
考虑怎样的两个数x,y符合条件(x>y),首先x要是y的倍数。然后x/y要是一个质数,则x的质因数个数应该比y的质因数个数恰多1.因此我们预处理出g[i],表示a[i]的质因数个数,如果x,y合法则x是y的倍数且g[x]=g[y]+1.可以发现,有边相连的两个点的g[i]一定是一奇一偶!因此我们可以根据g[i]的奇偶性黑白染色,就得到了一张二分图。然后s向左边的点连边,容量为个数,费用为0,右边的点原创 2017-12-28 11:05:13 · 377 阅读 · 0 评论 -
CF512C Fox And Dinner(数学+二分图+最大流)
%%%Elijahqi,秒题的神犇。 首先我们发现,如果两个数的和是质数,则一定是一奇一偶,所以环一定是偶环,我们可以根据奇偶性黑白染色,变成一张二分图。题目保证环的大小一定大于等于3,所以每个点的度一定是2。那么我们就可以直接建图跑最大流来判断是否可行了。S向白点建边,容量为2,黑点向T建边,容量为2,白点向能相邻的黑点建边,容量为1。看是否满流即可。原创 2017-12-23 23:07:41 · 387 阅读 · 0 评论 -
poj2125 Destroying The Graph(二分图最小点权覆盖集,最小割输出割边)
把每个点分成入和出,显然是张二分图,就是求最小点权覆盖集,可以用最小割解决。问题在于输出最小割的割边。蒟蒻才发现以前自己的理解是不正确的。 最小割的割边一定满流是没有错的,但是反过来,满流的边就是割边是错误的。比如你看s->x->y->t,容量都相同。则割边一条即可,无需所有满流的三条边。那如何找到割边呢? 在残余网络上从s开始跑一遍dfs,可以到的点都是属于S集合的。然后枚举每一条边x->y,原创 2017-12-28 15:50:31 · 449 阅读 · 0 评论 -
bzoj3158 千钧一发(数学+最大点权独立集)
要求所选数满足条件A或B,等价于所选数没有既不满足A又不满足B的。那我们就把既不满足A,又不满足B的两个点之间连边。则我们就是要选出一个最大点权独立集。然后我们可以根据奇偶划分二分图,用最小割来做。类似这道题#include #include #include #include #include using namespace std;#define ll long long#d原创 2018-01-04 21:52:15 · 344 阅读 · 0 评论 -
bzoj1143 [CTSC2008]祭祀river(最长反链长度,Floyd+二分图最大匹配)
在有向无环图中,有如下的一些定义和性质:链:一条链是一些点的集合,链上任意两个点x, y,满足要么 x 能到达 y ,要么 y 能到达 x 。反链:一条反链是一些点的集合,链上任意两个点x, y,满足 x 不能到达 y,且 y 也不能到达 x。那么很显然这道题就是求最长反链长度了。一个定理:最长反链长度 = 最小链覆盖对偶定理:最长链长度 = 最小反链覆盖原创 2018-01-07 15:33:13 · 508 阅读 · 0 评论 -
bzoj2718 [Violet 4]毕业旅行(同bzoj1143)
bzoj2718 [Violet 4]毕业旅行(同bzoj1143)原创 2018-01-07 15:37:59 · 382 阅读 · 0 评论 -
poj1548 Robots(最小路径覆盖/LIS)
这道题很显然是个最小路径覆盖问题。可以用二分图匹配来解决。 其实也可以用dp来解决。把所有点按第一关键字x,第二关键字y从小到大排序。则从1~n的点已经满足了第一维,从i->j(i< j)只需要满足p[i].y<=p[j].y即可。例如样例就是4 4 6 4 7.根据题意,这个偏序集的链是一个不降序列。我们现在就是要求这个偏序集的最小链划分数(也就是图中的最小链覆盖数),根据Dilworth定理,原创 2018-01-07 16:32:48 · 427 阅读 · 0 评论 -
bzoj3774 最优选择(二分图+最小割)
这题好神啊。 学到了一点:将“或”连接的条件串联起来,至少割掉一条边=这些条件至少满足一个。 本题:对于每一个点,有三种情况 A、放弃这个点的收入 B、付出占领这个点的代价 C、付出占领这个点周围四个点的代价 那么A、B、C应当连在一条路径上。 注意到A和C显然是对称的,因此需要对原图进行黑白染色,然后把A类边和C类边放在两边。 因此我们首先对原图黑白染色,原创 2018-01-09 22:17:37 · 537 阅读 · 0 评论 -
luogu3731 [HAOI2017]新型城市化(二分图+网络流+tarjan求scc)
我们把给定的边连成图,根据题目要求是一张二分图。这张图的补图的最大团就是原图的最大点独立集。因此我们就是要求删掉哪条边以后最大点独立集会变大。最大点独立集=点数-最小点覆盖集,而最小点覆盖集就是二分图的最大匹配。因此我们就是要求哪些边一定在最大匹配上。我们可以跑一遍网络流来求最大匹配,然后考虑对残余网络求scc。一条边一定出现在最大匹配中,当且仅当他是满流边且两端点不处于同一scc中。为什么呢?因为原创 2018-03-15 09:16:51 · 440 阅读 · 0 评论 -
CF813F Bipartite Checking(lct,同bzoj4025)
动态加边删边,判断是否是二分图。同bzoj4025原创 2018-03-09 09:39:35 · 367 阅读 · 0 评论 -
bzoj2138 stone(Hall定理+线段树)
这篇博文讲得很好:传送门 Hall定理: 二分图G中的两部分顶点组成的集合分别为X, Y, X={X1, X2, X3,X4,………,Xm}, Y={y1, y2, y3, y4 ,………,yn},G中有一组无公共点的边,一端恰好为组成X的点的充分必要条件是: X中的任意k个点至少与Y中的k个点相邻。(1≤k≤m)然后由于这道题的特殊性质,我们不需要验证任意子集均满足hall定理,排序后只需要原创 2018-03-04 14:33:32 · 405 阅读 · 0 评论 -
bzoj3693 圆桌会议(Hall定理+线段树)
题解:传送门 要求任意子集均满足,我们考虑对于每一个区间[p,q](显然只有Q=riQ=r_i时这个区间才有询问的意义,同时我们也有P=ljP=l_j),所有[l,r]在[p,q]之内的a的和s应满足s<=q-p+1即s+p-1<=q,否则一定不满足Hall定理。于是我们把所有的区间按r升序排列,考虑枚举Q,维护P=LjP=L_j时的答案,我们每次做到区间[l,r]时,所有P=1…l的和s都增大了原创 2018-03-05 21:46:05 · 575 阅读 · 0 评论 -
bzoj3175 [Tjoi2013]攻击装置(二分图最大点独立集)
显然是二分图。就是求一个二分图最大点独立集。原创 2018-03-21 10:27:16 · 197 阅读 · 0 评论 -
bzoj3168 [Heoi2013]钙铁锌硒维生素(矩阵求逆+匈牙利)
如果把ai替换成bj,这n个向量还是线性无关即可以。 我们求一个C∗A=B,=>C=B∗A−1C∗A=B,=>C=B∗A−1C*A=B,=>C=B*A^{-1} 矩阵求逆可以高斯消元来做,注意他原本的A矩阵也不一定就线性无关qaq 如果Cij!=0Cij!=0C_{ij}!=0,说明bj可以替换ai。因此CTCTC^T就是这张二分图的邻接矩阵。然后我们就要求一个字典序最小的完...原创 2018-05-18 22:37:51 · 288 阅读 · 0 评论 -
bzoj5335 [TJOI2018]智力竞赛(Floyd+二分答案+匈牙利)
二分答案以后就是个最小路径覆盖。 注意要先Floyd传递闭包。#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define ll long long#define inf 0x3f3f3f3f#define N 510inline char...原创 2018-05-21 23:28:59 · 285 阅读 · 0 评论 -
CF981F Round Marriage(二分答案+Hall定理)
二分答案以后就是看是否存在完美匹配。 然而直接建图肯定是gg 我们猜这个hall定理只需要区间满足即可! 如果是一条线的话那直接枚举过去就好了… 但它偏偏是一个环!然后我就gg了,各种瞎搞未果。 正确做法是把这个环拆成链qaq 把所有的点b复制一遍接在后面。 把所有的点b复制一遍接在前面。 对于每一个点a,我们得到一个区间{a-mid,a+mid} 如果a+mid>=L,那...原创 2018-05-29 23:12:02 · 1003 阅读 · 0 评论 -
poj2942 Knights of the Round Table(点双的性质+二分图染色)
首先我们建出补图,那么就是求这样的点的个数:不在任何一个>=3的奇环上。 我们搞出点双,如果点x,y不在一个点双内,那么他俩一定不在一个环上。 所以我们对每个点双分别讨论。 这里有一个结论:如果一个点双内存在一个奇环,那么这个点双内的每一个点都在一个奇环上。 大概口胡一下:对于一个点双,一定存在一个过所有点的简单环路。如果这个点双有奇数个点,则得证。 否则如果我们找到了一个奇环。点...原创 2018-06-01 16:54:46 · 238 阅读 · 0 评论 -
loj6226「网络流 24 题」骑士共存问题(二分图最大点独立集,最小割)
把可以互相攻击到的点之间连一条边,我们可以发现这是一张二分图(不存在奇环),答案就是最大点独立集(不能互相攻击到,等价于所选点之间不能有边)。也就是所有点-最小覆盖集。而二分图的最小覆盖集就是s向左边点连边,容量为1,右边点向T连边,容量为1,原来的边从左指向右,容量为inf,建图后的最小割。这题怎么二分图染色呢?可以发现,马如果从(x,y)->(xx,yy),则(x+y)和(xx+yy)的奇偶性一原创 2017-12-18 10:06:00 · 638 阅读 · 0 评论 -
luogu3877 [TJOI2010]打扫房间(二分图染色+最大流)
要求判断是否能用若干环路覆盖所有空地,环大小>2,我们发现环一定是偶环,然后每个点入度均为2,可以直接二分图染色,然后最大流看是否满流。原创 2017-12-30 19:58:13 · 362 阅读 · 0 评论 -
hdu4160 Dolls (最小路径覆盖)
hdu4160 Dolls (最小路径覆盖)原创 2017-12-30 18:40:53 · 345 阅读 · 0 评论 -
bzoj1191 [HNOI2006]超级英雄Hero(二分图最大匹配)
裸题诶!左半图是1~m的题目,右半图是0~n-1的锦囊,求最大匹配。注意题目要求按m的顺序求,不能断。原创 2017-09-30 14:47:01 · 332 阅读 · 0 评论 -
vijos1212 Way Selection(二分图最大匹配)
建二分图,然后去跑匈牙利算法就好了。原创 2017-09-30 15:16:44 · 349 阅读 · 0 评论 -
bzoj1059 [ZJOI2007]矩阵游戏(二分图完美匹配)
同行同列的点无论经过多少次变换人仍然同行或同列,所以题目可转换为能不能找到n个互相不同行或同列的点。直接行列二分图看能否完美匹配即可。原创 2017-09-30 16:11:48 · 324 阅读 · 0 评论 -
bzoj4950 [Wf2017]Mission Improbable(贪心+二分图最大匹配)
一开始考虑,每个不为0的位置都拿到1,然后每行每列最大值不能动。然后又考虑到,如果行列最大值相同,我们可以在他们交叉的位置放一个最大值即可,而不需要两个。因此转化成一个二分图匹配的问题。(显然不同的最大值不会互相干扰,因为之间根本不可能有边)每成功匹配到一个,就可以多拿一个最大值。原创 2017-10-02 12:31:32 · 1824 阅读 · 0 评论 -
bzoj1562 [NOI2009]变换序列(二分图完美匹配+贪心)
可以发现,每个数最多可以变成两个数,我们以此为边建二分图。然后跑完美匹配即可。题目还要求输出字典序最小的答案,这个怎么做呢?考虑我们匈牙利算法的过程,如果强制要求每个点先连向小的,再连向大的,则我们会尝试着先给当前数匹配小的,而之前匹配过的数要为他腾位置,因此我们只要倒着匹配就好啦!让最后匹配的尽量小。 严谨的证明见dalao byvoid:https://www.byvoid.com/zhs/b原创 2017-10-02 13:29:26 · 429 阅读 · 0 评论 -
luogu1155【2008提高】双栈排序(二分图判断+模拟)
这题可是真神。 让字典序最小,当然尽量进S1 那什么时候必须进S2呢? a[i]和a[j] 不能压入同一个栈⇔存在一个k,使得i< j< k且a[k]< a[i]< a[j] 因为一个数只能进出一次,k要排在前面所以弹出k时i和j都在栈里,如果两者在同一个栈弹出后顺序就错误了。 因此我们把这种一定不同栈的i,j连一条边,就得到了一个图,然后我们去判断这张图是不是二分图(黑白点染色),显然不原创 2017-10-02 15:43:19 · 434 阅读 · 0 评论 -
poj1112 Team Them Up!(二分图染色+dp)
首先,如果两人不互相认识,就肯定不能在一组,因此我们建出补图,判断是否是二分图,不是的话直接输出No solution,否则一定有解。我们在染色的同时求出每个连通块每种颜色的个数,记作cnt[i][0/1]。则现在问题转化为:你有n个数对(xi,yi),从每个数对中选出一个放到A集合中,其他的放到B集合中,要求A,B集合的和尽量接近。我们可以用背包dp解决这个问题,dp[i][j]表示前i个数对,我原创 2017-10-02 17:43:37 · 387 阅读 · 0 评论 -
CF623A Graph and String(二分图染色)
显然,如果两个点之间没有边相连,说明他们一个是a,一个是c。因此我们可以求出原图的补图,进行二分图染色。需要注意的是,如果一个点和其他所有点均连通,即在补图中为一个孤点,我们不对他进行染色,让他作为字母b.最后还要判断一下染色是否合法。(原图中相连的两点不能为a,c)原创 2017-10-03 12:10:44 · 494 阅读 · 0 评论 -
CF687A NP-Hard Problem(二分图判断)
显然是二分图即可。两人一人拿一种颜色的顶点即可。否则一定不可。原创 2017-10-03 12:35:30 · 502 阅读 · 0 评论 -
loj6000 「网络流 24 题」搭配飞行员(二分图最大匹配)
求二分图最大匹配裸题。可以建图跑最大流,也可以匈牙利算法。最大流原创 2017-12-08 17:33:23 · 342 阅读 · 0 评论 -
loj6002「网络流 24 题」最小路径覆盖(最小不可相交路径覆盖+输出方案)
求有向无环图的不相交最小路径覆盖。把原图的每个点V拆成Vx和Vy两个点,如果有一条有向边A->B,那么就加边Ax−>By。这样就得到了一个二分图。那么最小路径覆盖=原图的结点数-新图的最大匹配数。证明:一开始每个点都是独立的为一条路径,总共有n条不相交路径。我们每次在二分图里找一条匹配边就相当于把两条路径合成了一条路径,也就相当于路径数减少了1。所以找到了几条匹配边,路径数就减少了多少。所以有最小路原创 2017-12-08 20:55:42 · 396 阅读 · 0 评论 -
poj2594 Treasure Exploration(可相交最小路径覆盖)
可相交最小路径覆盖,用floyd求出原图的传递闭包,即如果a到b有路径,那么就加边a->b。然后就转化成了最小不相交路径覆盖问题。原创 2017-12-08 22:31:20 · 296 阅读 · 0 评论 -
loj6007「网络流 24 题」方格取数(最大点权独立集+最小割)
首先把网格图按(i+j)%2黑白染色,连成二分图。则答案要求的就是此图的最大点权独立集。 二分图最大点权独立集:从图中找到权值和最大的点集,使得它们之间两两没有边。 二分图最小点权覆盖集:从图中选取一些点,使这些点覆盖所有的边,并且选出来的点的权值尽可能小。 其实二分图最大点权独立集是二分图最小点权覆盖集的对偶问题。即是总权值-二分图最小点权覆盖集。 那么如何求二分图最小点权覆盖集呢?我原创 2017-12-09 15:51:03 · 501 阅读 · 0 评论 -
CIA3 NOI接站(tarjan缩环+Floyd传递闭包+可相交最小路径覆盖)
可以发现,题目求得就是一个可相交最小路径覆盖,但是有环。所以我们先用tarjan把环都缩掉,然后Floyd传递闭包,求二分图最大匹配,答案就是scc-ans.原创 2017-12-11 08:12:12 · 328 阅读 · 0 评论 -
bzoj4554 [Tjoi2016&Heoi2016]游戏(二分图最大匹配)
首先考虑如果没有软硬石头的话,答案就是min(n,m),如果只有软石头的话,就是相当于限制了某些点不能放,可以用行和列建二分图,跑最大匹配。如果有硬石头的话,相当于把原来的一行(列)分成了两部分,都可以放一个炸弹,因此把这些行(列)拆成不同的不会互相影响部分即可。点是O(n^2)的,边也是O(n^2)的。原创 2017-12-11 21:26:12 · 356 阅读 · 0 评论 -
bzoj4213 贪吃蛇(二分图染色+有源汇有上下界最小费用流)
hzwer这篇题解写的已经很不错了:传送门 首先二分图染色,我们发现对于环形蛇,每个点都连接了两个点。对于非环形蛇,除了头尾两个点以外,每个点也都连了两个点。于是乎,我们就是要把空点都连接上两个点。所以源向所有白点连边,容量为(2,2),所有黑点向汇连边,容量为(2,2)。所有白点可以连接他周围的黑点,所以所有白点向四周的黑点建边,容量为(0,1)。这些边都没有花费。然后我们允许边界上的点只连接一原创 2017-12-22 11:14:56 · 630 阅读 · 0 评论 -
bzoj3275 Number(最大点权独立集)
显然是求个最大点权独立集。数学一下,肯定是一奇一偶才能凑成合法。所以可以根据奇偶二分染色。然后就是套路了。传送门原创 2017-12-25 12:59:35 · 380 阅读 · 0 评论 -
luogu3386【模板】二分图最大匹配
二分图最大匹配板子原创 2017-09-30 14:17:17 · 297 阅读 · 0 评论