二分图——骑士放置(最大独立集)

探讨如何使用二分图理论解决N*M棋盘上的骑士放置问题,目标是找到最大数量的互不攻击的骑士。文章提供输入输出格式,数据范围,并给出样例解答,指出该问题实质为求最大独立集并解释了其与二分图的关系。
摘要由CSDN通过智能技术生成

骑士放置

给定一个 N*M 的棋盘,有一些格子禁止放棋子。

问棋盘上最多能放多少个不能互相攻击的骑士(国际象棋的“骑士”,类似于中国象棋的“马”,按照“日”字攻击,但没有中国象棋“别马腿”的规则)。

输入格式
第一行包含三个整数N,M,T,其中T表示禁止放置的格子的数量。

接下来T行每行包含两个整数x和y,表示位于第x行第y列的格子禁止放置,行列数从1开始。

输出格式
输出一个整数表示结果。

数据范围
1 ≤ N , M ≤ 100 1≤N,M≤100 1N,M100
输入样例:
2 3 0
输出样例:
4

题解:

我们还是通过奇偶染色来看,奇数染黑(在自己草稿本上花下)可以发现我当前格子的横纵坐标为偶数的时候,攻击的位置一定是黑色的。所以我们这个图是满足二分图的。(未证明,经验做题)。所以我们在能攻击到的地方连一条边,那么题目要求不能互相攻击,并且要求摆放的棋子尽可能多。所以这明显就是一个最大独立集的问题了。那么答案就是总的格子数-坏掉的格子数目-最大匹配(最小点覆盖)。

#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
const int N=1e2+7;
int ne[N],head[N],
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值