题目背景

众周所知,在西洋棋中,我们有城堡、骑士、皇后、主教和长脖子鹿。

题目描述

如图所示,西洋棋的“长脖子鹿”,类似于中国象棋的马,但按照“目”字攻击,且没有中国象棋“别马腿”的规则。(因为长脖子鹿没有马腿)

给定一个N * MN∗M,的棋盘,有一些格子禁止放棋子。问棋盘上最多能放多少个不能互相攻击的长脖子鹿。

输入格式

输入的第一行为两个正整数NN,MM,KK。其中KK表示禁止放置长脖子鹿的格子数。

第22~第K+1K+1行每一行为两个整数Xi, YiXi,Yi,表示禁止放置的格子。

输出格式

一行一个正整数,表示最多能放置的长脖子鹿个数。

输入输出样例

输入 #1复制

2 2 1
1 1
输出 #1复制

3
输入 #2复制

/*额外提供一组数据*/
8 7 5
1 1
5 4
2 3
4 7
8 3
输出 #2复制

28
思路:
  • 首先我们看,在棋盘上放棋子,让他们互相不能攻击,这明显是到二分图最大独立集(类似题骑士共存问题

  • 接着我们想怎样染色,第一下想的就是像棋盘那样按行列奇偶性来染,但是显然不对。于是我们发现一个惊人的问题,基数行和偶数行之间的棋子不会互相攻击!!!这样就好了,按行奇偶性来染色,跑个二分图最大独立集就行(二分图最大独立集=点数-最大匹配数)

80分的代码QAQ:

 #include<bits/stdc++.h>

 //最大独立集=n-最小点覆盖
using namespace std;
#define maxn 6666
int dx[]={,,,,-,-,-,-};
int dy[]={,-,,-,,-,,-};
int mp[maxn][maxn];
int match[*];
int vis[];
int num[maxn][maxn];
int flag=;
int n,m,k;
int head[maxn*maxn];
inline int read(){
char c = getchar(); int x = , f = ;
while(c < '' || c > '') {if(c == '-') f = -; c = getchar();}
while(c >= '' & c <= '') x = x * + c - '', c = getchar();
return x * f;
}
struct Edge{
int to,next;
}e[**];
void add(int u,int v){
flag++;
e[flag].to=v;
e[flag].next=head[u];
head[u]=flag;
}
inline int cal_note(int xx,int yy){ //计算该格子的编号
return (xx-)*n+yy;
}
int dfs(int u){
for(register int i=head[u];i;i=e[i].next){
int temp=e[i].to;
if(!vis[temp]){
vis[temp]=;
if(match[temp]==||dfs(match[temp]))
{
match[temp]=u;
return ;
}
}
}
return ;
}
int main(){
//int n,m;
//scanf("%d%d",&n,&m);
n=read();
m=read();
k=read();
int xx,yy;
for(int i=;i<=k;i++){
//scanf("%d%d",&x,&y);
xx=read();
yy=read();
mp[xx][yy]=;// 标记不可以走到的点
}
int cnt=;
/*for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
num[i][j]=++cnt; // 给每一个点编号 */
for(register int i=;i<=n;i+=){
for(register int j=;j<=m;j++){
if(mp[i][j])
continue;
else{
int x=i;
int y=j;
for(int k=;k<;k++){
int tx=x+dx[k];
int ty=y+dy[k];
if(tx>=&&ty>=&&tx<=n&&ty<=m&&!mp[tx][ty]){
//v[num[x][y]].push_back(num[tx][ty]);
//v[num[tx][ty]].push_back(num[x][y]);
add(cal_note(i,j),cal_note(tx,ty));
// add(cal_note(tx,ty),cal_note(x,y));
}
}
}
}
}
int ans=;
for(register int i=;i<=n;i+=){
for(register int j=;j<=m;j++){
if(mp[i][j])
continue;
memset(vis,,sizeof(vis));
if(dfs(cal_note(i,j)))
ans++;
}
}
int res=n*m-k-ans;
printf("%d\n",res);
return ;
}

长脖子鹿放置【洛谷P5030】二分图最大独立集变形题的更多相关文章

  1. P3355 骑士共存问题【洛谷】(二分图最大独立集变形题) //链接矩阵存图

    展开 题目描述 在一个 n*n个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示.棋盘上某些方格设置了障碍,骑士不得进入 对于给定的 n*n 个方格的国际象棋棋盘和障碍标志,计算棋盘上最多可 ...

  2. P5030 长脖子鹿放置

    题目背景 众周所知,在西洋棋中,我们有城堡.骑士.皇后.主教和长脖子鹿. 题目描述 如图所示,西洋棋的"长脖子鹿",类似于中国象棋的马,但按照"目"字攻击,且没 ...

  3. P5030 长脖子鹿放置 最小割

    $ \color{#0066ff}{ 题目描述 }$ 如图所示,西洋棋的"长脖子鹿",类似于中国象棋的马,但按照"目"字攻击,且没有中国象棋"别马腿& ...

  4. 洛谷 - P5030 - 长脖子鹿放置 - 二分图最大独立集

    https://www.luogu.org/problemnew/show/P5030 写的第一道黑色题,图建对了. 隐约觉得互相攻击要连边,规定从奇数行流向偶数行. 二分图最大独立集=二分图顶点总数 ...

  5. Luogu P5030 长脖子鹿放置(网络流)

    匈牙利T了,Dinic飞了... 按奇偶连 #include <cstdio> #include <iostream> #include <cstring> #in ...

  6. 连续攻击游戏【P1640洛谷】二分图匹配变形【好题】【每次memset太慢了,用时间戳id。】

    lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备最多只能使 ...

  7. 洛谷[LnOI2019]长脖子鹿省选模拟赛 简要题解

    传送门 听说比赛的时候T4T4T4标程锅了??? WTF换我时间我要写T3啊 于是在T4T4T4调半天无果的情况下260pts260pts260pts收场真的是tcltcltcl. T1 快速多项式变 ...

  8. 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解

    今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...

  9. 洛谷 P5596 【XR-4】题

    洛谷 P5596 [XR-4]题 洛谷传送门 题目描述 小 X 遇到了一道题: 给定自然数 a,ba,b,求满足下列条件的自然数对 (x,y)(x,y) 的个数: y^2 - x^2 = ax + b ...

随机推荐

  1. GBK字符集

    GBK字库 编辑 同义词 GBK一般指GBK字库 GBK全称<汉字内码扩展规范>(GBK即“国标”.“扩展”汉语拼音的第一个字母,英文名称:Chinese Internal Code Sp ...

  2. Linux 安装Mysql(图文教程)

    原文:Linux 安装Mysql(图文教程) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net ...

  3. Django2.0 开始一个项目

    python项目运行环境: 安装虚拟环境工具   pip install virtualenv 使用虚拟环境: 创建虚拟环境: virtualenv  <虚拟环境名称> 进去虚拟环境: S ...

  4. pycharm2019.2永久激活

    Pycharm2019.2永久激活Pycharm官网在不到两个月内与2019.7.24更新到最新版本pycharm2019.2,不可说更新不快,对于"喜新厌旧"的我怎能错过新版本呢 ...

  5. SVN 问题解决之 The XML response contains invalid XML

    公司几个同事的SVN更新时出现了The XML response contains invalid XML报错 经Google得到一个线索,可能和Http请求有关. 想起之前项目改过一次网络请求方式, ...

  6. [书籍翻译] 《JavaScript并发编程》第七章 抽取并发逻辑

    本文是我翻译<JavaScript Concurrency>书籍的第七章 抽取并发逻辑,该书主要以Promises.Generator.Web workers等技术来讲解JavaScrip ...

  7. 关于一个mvc架构的cms的后台getshell

    都知道,mvc的话 除了根目录还有public目录可以访问,其他的访问都是不行的,因为会默认都是会解析url 然后我们来看今天的猪脚 大概的图片上传还有远程文件加载我黑盒测过了  就是想捞一个快一点的 ...

  8. vue——store全局存储

    业务场景:刷新页面时,首次拉取所有配置,存储到store状态管理用于全局调用: import Vue from 'vue' import Vuex from 'vuex' import userInf ...

  9. MySQL 查询大于“时间字段”15分钟、1小时、1天的数据

    以下代码中times为时间字段,类型为datetime 1.查询大于times十五分钟的数据 //大于号后面都是获取times十五分钟后的时间select*from table where now() ...

  10. python中yield的用法详解-转载

    原文链接:https://blog.csdn.net/mieleizhi0522/article/details/82142856 ,今天在写python爬虫的时候,循环的时候用到了yield,于是搜 ...