4: 最大独立集 :选出最多的点,使得选出的点之间没有边。

求最大独立集:选出最小的点可以破坏所有的边 《==》最小点覆盖 《==》最大匹配数。

假设最大匹配数为m,共有n个点,即选出最小的点可以破坏所有的边的点数为m,此时最大独立集即为n - m;

例题:骑士放置

来源:算法竞赛进阶指南:


给定一个 N×M 的棋盘,有一些格子禁止放棋子。问棋盘上最多能放多少个不能互相攻击的骑士(国际象棋的“骑士”,类似于中国象棋的“马”,按照“日”字攻击,但没有中国象棋“别马腿”的规则)。输入格式
第一行包含三个整数 N,M,T,其中 T 表示禁止放置的格子的数量。接下来 T 行每行包含两个整数 x 和 y,表示位于第 x 行第 y 列的格子禁止放置,行列数从 1 开始。输出格式
输出一个整数表示结果。数据范围
1≤N,M≤100
输入样例:
2 3 0
输出样例:
4

图中的马可以攻击它周围的八个格子:又因为它能攻击到的格子横纵坐标之和为它本身坐标的横纵坐标之和加减abs(3) 因此它每次攻击到的其它马的横纵坐标之和与它本身的横纵坐标之和相反,所以我们可以将横纵坐标之和为偶数,以及横纵坐标之和为奇数的点分为两半,即此分法可以把它分为一个二分图。

由题意:每个马不能相互攻击到,即每点之间不能有独立的边,即求得是的它的最大独立集。

因此解题步骤为:

1:求出它的最小点覆盖假设为res。

2:最大独立集即为 n * m - res - k(k为被破坏的点。)

代码如下:


#include <cstdio>
#include <cstring>
#include <iostream>#define x first
#define y secondusing namespace std;typedef pair<int, int> PII;const int N = 110;int n, m, t;
bool st[N][N];//判断该点是否被用过
bool map[N][N];//记录该坐标是否被破坏
PII match[N][N];//记录与某个点所匹配的点
int dx[8] = {-2, -1, 1, 2, 2, 1, -1, -2};//八个方向
int dy[8] = {1, 2, 2, 1, -1, -2, -2, -1};bool find(int a, int b)
{for (int i = 0; i < 8; i ++ ){int x = a + dx[i], y = b + dy[i];if (x < 1 || x > n || y < 1 || y > m) continue;if (st[x][y]) continue;if (map[x][y]) continue;st[x][y] = true;if (match[x][y].x == -1 || find(match[x][y].x, match[x][y].y)){match[x][y] = {a, b};return true;}}return false;
}int main()
{cin >> n >> m >> t;for (int i = 0; i < t; i ++ ){int a, b;scanf("%d %d", &a, &b);map[a][b] = true;//a, b被破坏}memset(match, -1, sizeof match);//初始化int res = 0;for (int i = 1; i <= n; i ++ )for (int j = 1; j <= m; j ++ )if ((i + j) % 2 && !map[i][j])//枚举每个坐标和为奇数的点且该格子不能被破坏{memset(st, false, sizeof st);if (find(i, j)) res ++ ;}cout << n * m - res - t << endl;return 0;
}

算法竞赛进阶指南 骑士放置相关推荐

  1. 《算法竞赛进阶指南》打卡-基本算法-AcWing 93. 递归实现组合型枚举:递归与递推、dfs、状态压缩

    文章目录 题目解答 题目链接 题目解答 分析: 此题和笔者另一篇博文很像,只不过是限定了个数.<算法竞赛进阶指南>打卡-基本算法-AcWing 92. 递归实现指数型枚举:递推与递归.二进 ...

  2. 《算法竞赛进阶指南》数论篇

    <算法竞赛进阶指南>数论篇(1)-最大公约数,素数筛,欧拉函数,同余,欧拉定理,BSGS <算法竞赛进阶指南>数论篇(1)-最大公约数,素数筛,欧拉函数,同余,欧拉定理,BSG ...

  3. 《算法竞赛进阶指南(by 李煜东)》习题题解 集合

    又是笔者给自己挖的大坑. 这里是李煜东所著<算法竞赛进阶指南(by 李煜东)>的习题题解集合. 有任何错误请在对应文章下反馈或联系 nicest1919@163.com ,谢谢 qwq 从 ...

  4. CH5202 自然数拆分Lunatic版(算法竞赛进阶指南,完全背包)

    算法竞赛进阶指南,278页,完全背包 本题要点: 1.把完全背包的代码改改即可.常规的完全背包: 有n个物品,每个物品的体积是v[i], 价值是w[i], 求装到大小为m的大背包,能获得的最大价值(每 ...

  5. 中位数--《算法竞赛进阶指南》(货仓选址和七夕祭问题详解)

    中位数 今天又和大家见面了啦~ 依旧是 <算法竞赛进阶指南>的学习哦~ 中位数(Median)又称中值,统计学中的专有名词,是按顺序排列的一组数据中居于中间位置的数,代表一个样本.种群或概 ...

  6. 金字塔(算法竞赛进阶指南)

    虽然探索金字塔是极其老套的剧情,但是有一队探险家还是到了某金字塔脚下. 经过多年的研究,科学家对这座金字塔的内部结构已经有所了解. 首先,金字塔由若干房间组成,房间之间连有通道. 如果把房间看作节点, ...

  7. AcWing 122. 糖果传递【贪心】【《算法竞赛进阶指南》,微软面试题 , HAOI2008】

    AcWing 122. 糖果传递 一.题目链接 二.题目分析 (一)算法标签 (二)解题思路 三.AC代码 四.其它题解 一.题目链接 AcWing 122. 糖果传递 进阶题目 AcWing 105 ...

  8. 算法竞赛进阶指南 萌新入门!

    算法竞赛进阶指南 文章目录 算法竞赛进阶指南 前言 一.介绍本书 二.如何阅读本书 三.总结 **笔记思路和结构 ** 算法竞赛进阶指南 这篇文章就简单的写一下吧! 前言 ​ 作为一个想要入坑的算法的 ...

  9. 算法竞赛进阶指南0x3A 博弈论之SG函数

    算法竞赛进阶指南0x3A 博弈论之SG函数

最新文章

  1. 网易云课堂解析_网易云课堂课程下载教程
  2. TI的TCP/IP协议栈---NDK
  3. Go基础系列:构建go程序
  4. 微信小程序开发 Request Headers: Provisional headers are shown
  5. 对于Office Live平台的思考
  6. 计算图像的直方图,求峰值点
  7. 基本BASH SHELL脚本命令——切换目录以及处理文件和目录的基本知识
  8. 零散的JavaScript公用方法
  9. xstream使用的第二个小问题
  10. lync显示无法找到服务器,Lync 中的用户联系人照片未正确显示
  11. android音频驱动工程师,4.Android音频驱动(底层1)
  12. Unicode(ASII)控制字符的含义
  13. flink 分词程序代码(批处理和实时)
  14. Git fatal: Authentication failed
  15. ubuntu 20.04 | 常用软件 必要配置
  16. 快收下这份拼接视频方法攻略,制作出你想要的视频
  17. 阿里云海外服务器网络评测
  18. ORB-SLAM2代码解析
  19. 【什么情况下U盘会出现0字节?】
  20. 如何增强家里WiFi信号?

热门文章

  1. 轻松熊喵喵个人笔记 -- siki学院java教学
  2. scott被锁住了怎么办
  3. Spring Security 初体验
  4. 最火热的东南亚跨境电商平台Shopee、Lazada,为什么必须要做补单
  5. 二叉树的递归算法到底该怎么理解?
  6. 问卷星 如何自动填写问卷
  7. Java编译多个依赖文件
  8. 用python做时间序列预测十:时间序列实践-航司乘客数预测
  9. 在线JSON转HTML工具
  10. Mysql语法系列—show full processlist介绍