随笔分类 -  C-图论-二分图匹配

摘要:Link: P2764 传送门 Solution: 基本模型 首先结论为:将每个点$v$拆成$v,v'$,有向边$edge(u,v)$改为$edge(u,v')$,建成二分图 那么$最小路径覆盖数=n-二分图最大匹配数$ 证明:匹配$(u,v')$相当于连接了$(u,v)$,连通块个数减一,想要连通 阅读全文
posted @ 2018-08-27 20:43 NewErA 阅读(165) 评论(0) 推荐(0)
摘要:Link: BZOJ 3140 传送门 Solution: 挺好的一道暴力题 首先发现可以每次贪心选择宽度为1的一面,即$1*x*y,1*x*z,1*y*z$ 那么对于与该面垂直的面,相当于解决了一行/一列 于是我们可以先考虑一个二维问题: 每次选取一行/一列要耗费一个代价,询问要覆盖所有染色点需要 阅读全文
posted @ 2018-07-22 22:30 NewErA 阅读(164) 评论(0) 推荐(0)
摘要:Link: BZOJ 1562 传送门 Solution: 一道比较考对$Hungry$算法理解的题目 首先可以轻松看出原序列和答案序列的对应关系,从而建出二分图匹配模型 下面的关键在于如何保证字典序最小 第一种方式是暴力逐位确定: 对于$1....n$每一位都先贪心选取字典序小的节点,判断将该边除 阅读全文
posted @ 2018-07-21 22:33 NewErA 阅读(153) 评论(0) 推荐(0)
摘要:Link: P2526 传送门 Solution: 一道提示非常到位的题目 题面中强调了在两个路径相邻点间只能再去至多一个点,且每个点只计算一次贡献 于是明显可以将原题看作询问在两个不相交点集间最多能连几条边 接下来将合法边连上跑二分图匹配就好了 Tip:二分图匹配时分清$X,Y$集合以及$matc 阅读全文
posted @ 2018-07-21 22:09 NewErA 阅读(243) 评论(0) 推荐(0)
摘要:Link: BZOJ 1059 传送门 Solution: 可以发现其实只要保证每行每列刚好只有一个就能确保构造出解 于是建立列集合与行集合的对应直接跑二分图匹配即可 Code: 阅读全文
posted @ 2018-07-21 21:56 NewErA 阅读(150) 评论(0) 推荐(0)
摘要:Link: P1640 传送门 Solution: 可以发现这道题其实是属性值集合和装备集合的对应,且每个点只能用一次 那么就能想到二分图最大匹配,一旦不可行直接退出就行了 Tip: 1、$Hungry$算法连有向边就行了…… 2、注意左右两个集合范围不同! Code: 阅读全文
posted @ 2018-07-21 21:52 NewErA 阅读(141) 评论(0) 推荐(0)
摘要:Link: BZOJ 2547 传送门 Solution: 很容易通过解可行性的单调性想到二分答案,接下来考虑如何验证解 发现一个很奇妙的条件:步兵和骑兵的个数相同 因此交换位置时不用考虑可行性,保证能完成交换(口胡证明一下就行了) 于是可以将每一次交换位置想成转变职业(不用考虑能否交换) 每一个士 阅读全文
posted @ 2018-06-05 21:54 NewErA 阅读(248) 评论(0) 推荐(0)
摘要:Link: BZOJ 3571 传送门 Solution: 和 BZOJ2395 的建模完全相同,(BZOJ2395 题解传送门) 仅仅是将其中的基础问题由最小生成树改成了二分图最大完美匹配 只要将原来的Kruscal模块改为KM算法即可 Code: Review: 1、需要注意的就是最小匹配转为最 阅读全文
posted @ 2018-05-30 09:44 NewErA 阅读(199) 评论(0) 推荐(0)
摘要:Link:https://www.lydsy.com/JudgeOnline/problem.php?id=1143 Solution: 一道最长反链的模板题 由Dilworth定理可知:最小链覆盖数(偏序集能划分成的最少的全序集的个数) = 最长反链长度 其对偶定理:最长链长度 = 最小反链覆盖数 阅读全文
posted @ 2018-05-27 09:00 NewErA 阅读(201) 评论(0) 推荐(0)
摘要:二分图匹配模板+总结 阅读全文
posted @ 2018-02-06 09:06 NewErA 阅读(1906) 评论(0) 推荐(0)