随笔分类 - 图论 二分图
摘要:【题意】给定n*n网格,有k个物品,每次可以消灭一行或一列,求消灭掉所有物品的最少操作次数。 【算法】二分图最小覆盖 【题解】此题是最小覆盖模型的出处。 将物品的x-y连边建立二分图。 最小覆盖:选择最少的点,使每条边至少有一个端点被覆盖。 刚好对应题意。 最小覆盖可以用最小割解决,将选择点视为割去
阅读全文
摘要:【算法】数论,二分图最大匹配 【题意】有无限张牌,给定n张面朝上的牌的坐标(N<=100),其它牌面朝下,每次操作可以选定一个>=3的素数p,并翻转连续p张牌,求最少操作次数使所有牌向下。 【题解】 1.定义bi,当ai和ai-1的朝向相同时,bi=0,否则bi=1。特别的,a0朝向下。 则问题转化
阅读全文
摘要:【题意】求DAG上最多的点使得互不可达。 【算法】floyd+最大匹配 【题解】 链是DAG上的一个点集,集合内的点相互单向可达。 反链是DAG上的一个点集,集合内的点相互不可达。 题目显然是求最长反链,转化为最小链覆盖。 最小链覆盖只要求可达,最小路径覆盖却要求相连。 所以floyd传递闭包(用f
阅读全文
摘要:【算法】博弈论+二分图匹配(最大流) 【题解】方格图黑白染色得到二分图, 二分图博弈:当起点不属于某个最大匹配时,后手必胜。 问题转化为那些点不属于某个最大匹配。 先找到一个最大匹配,非匹配点加入答案。 假设一个匹配点要解放成为非匹配点,则与其匹配的点必须去匹配另一个点。如果另一个点也是匹配点,则其
阅读全文
摘要:【题目】1738: 最小路径覆盖问题 【题解】网络流 关于输出路径,因为即使有反向弧经过左侧点也一定会改变左侧点的去向,若没连向右侧就会被更新到0,所以不用在意。 mark记录有入度的右侧点,然后从没入度的右侧点开始把整条路径输出来即可。 #include<cstdio> #include<algo
阅读全文
摘要:【网络流与二分图】专题链接 【图论】 图论-刘汝佳 完全三部图:图G可被分为三个顶点集,点集内的点相互均没有连边,不同点集的点之间相互均有连边。完全三部图的三元环个数是三点集点数的乘积。 无向无环图就是树。有向无环图DAG方便操作。 有环图可以tarjan缩点。 哈密顿回路(路径):每个点只经过一次
阅读全文
摘要:【题意】m个人修n辆车,时间为给定的表格a[i][j],一个人修完一辆才能修下一辆,求每辆车修完时间的总和。m<=9,n<=60。 【算法】最小费用最大流,二分图 【题解】将人放左边,将车放右边构成二分图,车向T连容量为1的边即可保证每辆车只修一次。 每个人有可能修多辆车,将每个人拆成n个点,每个点
阅读全文
摘要:【算法】二分图最大匹配(最大流) 【题解】按(i+j)奇偶性染色后,发现棋子跳到的地方刚好异色。 然后就是二分图了,对于每个奇点向可以跳到的地方连边,偶点不需连(可逆)。 所以题目要求转换为求二分图上最大独立集(对于每条边,至少有一个点不被选中)。 最大独立集=总点数-最小割 //代码略 //hzw
阅读全文
摘要:【算法】二分图匹配(最大流) 【题解】对i+j进行奇偶染色,就可以保证相邻两格异色。 然后就是二分图了,对相邻格子连边跑最大流即可。 #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const i
阅读全文
摘要:【最大流】Dinic ★推荐:Dinic入门。 本质:网络流本质上是为了解决一类取舍问题,这类取舍问题无法得知最优策略的模式(无法DP),因此通过构造一些带容量的路径表示原题目容量,模拟水流在这些容量之间的取舍,从而可以利用网络流来解决取舍问题。 Dinic算法:bfs得到分层图,然后严格按照分层图
阅读全文
摘要:【算法】 【算法】网络流 【算法】树 【算法】数学 ————【专题】生成树计数(矩阵树定理) ————【专题】计数问题(排列组合,容斥原理,卡特兰数) ————【算法专题】卡特兰数(计数数列) ————【专题】数论 ————【专题】概率和期望 【算法】动态规划 【算法】数据结构 ————【专题】平衡
阅读全文