U64949 棋盘覆盖(二分图)| 二分图匹配总结
https://ac.nowcoder.com/acm/contest/1062/B
【题目】
给出一张n×n(n≤100)的国际象棋棋盘,其中被删除了一些点,问可以使用多少1*2的多米诺骨牌进行掩盖。
【题意】
题意简单,不做多说明,多米诺骨牌可以理解为长方形的方块。
【题解】
仔细一想,可以发现能用二分图来做。即可以把每个位置的点进行重新编号,相邻的两点具有不同的性质。
比如说在2×2的图内第一个点\((1,1)\)标记为1,它是奇数,那么与它相邻的\((1,2)(1,2)\)就要标记成偶数。又比如在3×3的图内的点\((2,2)\)为奇数,那么\((1,2),(2,1)(2,3),(3,2)\)的点就要标记为偶数。然后两两建边,奇数点->偶数点 or 偶数点->奇数点(当然如果是被删除的点,则不能建边)。最后对 偶数点 or 奇数点 跟 奇数点 or 偶数点 进行二分图匹配即可。
时间复杂度:\(O(N^2M^2)\)
#include<bits/stdc++.h>
using namespace std;
const int N = 110;
const int dx[] = { 0,1,0,-1 };
const int dy[] = { 1,0,-1,0 };
int n, m, ans, f[N * N];
bool b[N][N], v[N * N];
vector<int>e[N * N];
bool dfs(int x) {
for (unsigned int i = 0; i < e[x].size(); i++) {
int y = e[x][i];
if (v[y]) continue;
v[y] = 1;
if (f[y] == -1 || dfs(f[y])) {
f[y] = x;return 1;
}
}
return 0;
}
int main() {
//freopen("in.txt", "r", stdin);
ios::sync_with_stdio(false), cin.tie(0);
cin >> n >> m;
while (m--) {
int x, y; cin >> x >> y;
b[x - 1][y - 1] = 1;
}
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
if (!b[i][j])
for (int k = 0; k < 4; k++) {
int x = i + dx[k], y = j + dy[k];
if (x >= 0 && x < n && y >= 0 && y < n && !b[x][y]) {
e[i*n+j].push_back(x * n + y);
e[x*n+y].push_back(i * n + j);
}
}
memset(f, -1, sizeof(f));
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++) {
if ((i ^ j) & 1) continue;
memset(v, 0, sizeof(v));
ans += dfs(i * n + j);
}
cout << ans << endl;
}
题后总结:
二分图匹配的模型有两个要素
- 节点能分成两个集合,每个集合内部有0条边。
- 每个节点只能与 1 条边相连。
我们简单把它称为 ”0要素“ 和 ”1要素“ 。在把实际问题抽象成二分图匹配时,我们就要寻找题目中具有这种 ”0“ 和 ”1“ 性质的对象从而发现构建模型的突破口。
U64949 棋盘覆盖(二分图)| 二分图匹配总结的更多相关文章
- [JoyOI] 1035 棋盘覆盖 (二分图匹配)
题目描述 给出一张nn(n<=100)的国际象棋棋盘,其中被删除了一些点,问可以使用多少12的多米诺骨牌进行掩盖. 输入格式 第一行为n,m(表示有m个删除的格子) 第二行到m+1行为x,y,分 ...
- kuangbin带你飞 匹配问题 二分匹配 + 二分图多重匹配 + 二分图最大权匹配 + 一般图匹配带花树
二分匹配:二分图的一些性质 二分图又称作二部图,是图论中的一种特殊模型. 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j ...
- 洛谷P2764 最小路径覆盖问题(二分图)
题意 给出一张有向无环图,求出用最少的路径覆盖整张图,要求路径在定点处不相交 输出方案 Sol 定理:路径覆盖 = 定点数 - 二分图最大匹配数 直接上匈牙利 输出方案的话就不断的从一个点跳匹配边 # ...
- hihoCoder 1393 网络流三·二分图多重匹配(Dinic求二分图最大多重匹配)
#1393 : 网络流三·二分图多重匹配 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 学校的秋季运动会即将开始,为了决定参赛人员,各个班又开始忙碌起来. 小Hi和小H ...
- 【POJ 1698】Alice's Chance(二分图多重匹配)
http://poj.org/problem?id=1698 电影和日子匹配,电影可以匹配多个日子. 最多有maxw*7个日子. 二分图多重匹配完,检查一下是否每个电影都匹配了要求的日子那么多. #i ...
- 稳定的奶牛分配 && 二分图多重匹配+二分答案
题意: 农夫约翰有N(1<=N<=1000)只奶牛,每只奶牛住在B(1<=B<=20)个奶牛棚中的一个.当然,奶牛棚的容量有限.有些奶牛对它现在住的奶牛棚很满意,有些就不太满意 ...
- hiho 第117周 二分图多重匹配,网络流解决
描述 学校的秋季运动会即将开始,为了决定参赛人员,各个班又开始忙碌起来. 小Hi和小Ho作为班上的班干部,统计分配比赛选手的重任也自然交到了他们手上. 已知小Hi和小Ho所在的班级一共有N名学生(包含 ...
- UVALive 4043 Ants(二分图完美匹配)
题意:每个蚁群有自己的食物源(苹果树),已知蚂蚁靠气味辨别行进方向,所以蚁群之间的行动轨迹不能重叠.现在给出坐标系中n个蚁群和n棵果树的坐标,两两配对,实现以上要求.输出的第 i 行表示第 i 个蚁群 ...
- 【网络流24题】No.7 试题库问题 (最大流,二分图多重匹配)
[题意] 假设一个试题库中有 n 道试题. 每道试题都标明了所属类别. 同一道题可能有多个类别属性.现要从题库中抽取 m 道题组成试卷.并要求试卷包含指定类型的试题. 试设计一个满足要求的组卷算法. ...
- HDU2255 奔小康赚大钱【二分图最佳匹配】
题目链接: http://acm.hdu.edu.cn/showproblem.php? pid=2255 题目大意: 村里要分房子. 有N家老百姓,刚好有N间房子.考虑到每家都要有房住,每家必须分配 ...
随机推荐
- 【Android Studio】 SQLite 数据库 增删改查
今日目标:参照标题 实现效果: 实现过程: 1.创建实现页面 页面设计思路: 最外层垂直线性布局.内部使用三个线性布局.后两个用的水平排版,用来显示数值. 实例化四个Button,两个EditText ...
- Centos 7在线安装JDK1.8+Tomcat+MySQL8.0+Nginx
一.安装JDK 注: 以下命令环境在Xshell中进行. 温馨提示: 在线安装方式需要有网速的前提,有的软件下载需要大量时间. 1.查询出系统自带的OpenJDK及版本 rpm -qa | grep ...
- 【源码系列#03】Vue3计算属性原理(Computed)
专栏分享:vue2源码专栏,vue3源码专栏,vue router源码专栏,玩具项目专栏,硬核推荐 欢迎各位ITer关注点赞收藏 语法 传入一个 getter 函数,返回一个默认不可手动修改的 ref ...
- 循环依赖导致编译或者服务启动报错问题:The dependencies of some of the beans in the application context form a cycle
错误如图: 我的是服务器启动服务时报错: ***************************APPLICATION FAILED TO START************************* ...
- Socket.D 网络应用协议,v2.1.6 发布
有用户说,"Socket.D 之于 Socket,尤如 Vue 之于 Js.Mvc 之于 Http" 与其它协议的简单对比 对比项目 socket.d http websocket ...
- BASE和最终一致性
四种性质: 基本可用性,软状态,强一致性,弱一致性 更据更新数据后各进程访问到数据的时间和方式不同: 如何实现各种类型的一致性: 对于HBase数据库来讲:
- 自定义一个简单的SpringBoot-Starter
1.创建一个简单的maven项目 2.导入相关依赖 <dependencies> <!--核心场景启动器,包含Spring的核心功能--> <dependency> ...
- 组合式api-子父组件之间通信props和emit
整体来说和vue2也是比较相似的. 使用props传递数据到子组件 父组件给定数据. 子组件中使用defineProps来接收父组件传递的数据. 子组件emit触发事件通知父组件 思想和vue2完全一 ...
- 华企盾DSC客户端服务无法启动一直处于启动停止状态
该问题有两种情况: 1.客户端安装有问题,5097目录缺少文件,解决方法见下面详细信息 2.客户端本地数据库出现问题,需要卸载客户端以及删除对应的本地数据库备份文件(解决方法见下面详细信息) 3.由于 ...
- 春秋云镜 - CVE-2022-32991
靶标介绍: 该CMS的welcome.php中存在SQL注入攻击. 访问页面,先注册,使用邮箱加密码登录. bp抓包,后台挂上sqlipy然后去测welcome.php,常用的语句都没成功但过一会就有 ...