随笔分类 - 图论:二分图
摘要:求二分图的不可行边 对于完备匹配的二分图来说: 如果我们把匹配边看做从右向左的单向边,其他边看做是从左向右的单向边 那么在图上行走的过程就是一条增广路 必须边: (x,y)匹配 去掉(x,y) x不可达y 即在两个强联通分量中 可行边: 在同一个强联通分量中 对于一般的二分图 我们可以通过汇点来构建
阅读全文
摘要:给定一个有向无环图 最多找到多少个点 并且这些点相互不连通 有向无环图的最小路径点覆盖=n-拆点二分图的最大匹配(路径不能相交) 每个左部点的失配代表该点没有出边 所以代表着一条路径的终点 终点最少,失配点最少,路径覆盖就最少 最小可重点覆盖(路径可以相交) 先传递闭包 再最小点覆盖 d[i][i]
阅读全文
摘要:国际象棋最多放多少个马? 正常连边 用染色法证明是二分图 求二分图的最大独立集 无向图: 最大团=补图的最大独立集 二分图: 最大独立集=n-最小点覆盖
阅读全文
摘要:给定一些矩阵 要求矩阵的指定位置被宽度为1的长方形覆盖 长方形可以重叠 但是只能覆盖在指定位置 最少要多少个长方形 2要素: 要么被行覆盖 要么被列覆盖 所以行和列之间建立二分图即可 #include <iostream> #include <cstdio> #include <cstring> #
阅读全文
摘要:有两台机器 A,B 以及 K 个任务。 机器 A 有 N 种不同的模式(模式 0∼N−1),机器 B 有 M 种不同的模式(模式 0∼M−1)。 两台机器最开始都处于模式 0。 每个任务既可以在 A 上执行,也可以在 B 上执行。 对于每个任务 i,给定两个整数 a[i] 和 b[i],表示如果该任
阅读全文
摘要:平面上给定n个白点和n个黑点,求一种方案:白点黑点相连并且不相交 容易发现结论: 如果有交叉的话 那么只要交换一下端点 就不会有交叉了 关键在于发现: 四边形两条对边的和一定小于对角线的和 所以交换之后就会变小 所以把距离作为权重 做最小权匹配 就一定是可行的方案 #include <iostrea
阅读全文
摘要:导弹有:发射时间/冷却时间/到达时间 给定若干个防御塔和目标 问最少多少时间能够消灭所有敌人 最多最少问题先看看二分答案!!! 二分答案之后 根据二分的时间 可以确定每个塔的匹配数 二分图匹配要求每个点都是等价的 因此这道题只能用拆点来做 #include <iostream> #include <
阅读全文
摘要:给定带有禁止位置n*n棋盘最多能放多少个车 1元素: 每行只能放一个车 这个车的行列号是唯一的 0元素: 一个车不能同时在两个行 #include <iostream> #include <cstdio> #include <cstring> using namespace std; const i
阅读全文
摘要:n*n的带有禁止位置的棋盘最多能放多少个1*2的多米诺骨牌 棋盘覆盖问题: 染色法 最多能放置多少个的问题 建模的策略在于找到问题包含的0要素和1要素 //确实只dfs左点 //match是双向的(对答案没有影响) // 注意是vis[y]=1 因为注意到dfs访问的点都是左点 而y都是右点 我们要
阅读全文
摘要:给定一个图 将点划分成两个集合 求集合内部边的最大值 二分图判定: 不存在奇环 #include <iostream> #include <cstdio> #include <cstring> using namespace std; const int N=20005; const int M=1
阅读全文