题意还是很容易理解的  感觉同(骑士共存问题)

主要就是建图了

将棋盘进行染色,这次不同于骑士共存那道题,这次直接对第几行染色

证明的话,自己yy了一个:

因为每一行无法到达的只有相邻的两行,那么就可以分情况了

若一行行数为奇数,那么将其与超级源点相连,流量为1

反之亦然,于超级汇点相连,同理流量为1

对于那些障碍点直接判掉就好了,

这样的话跟上面一样,在遍历整个图同时将不同的点进行相连,流量为INF,表示一种相连关系

最后愉快的跑一下最大流即可

题面

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+7;
const int INF=0x7f7f7f7f;
int m,n,k,p,s,t,cnt=1,ans,tot;
int dx[9]={0,-3,-3,-1,-1,1,1,3,3},dy[9]={0,-1,1,-3,3,-3,3,-1,1};
struct node
{int nx,to,flow;
} e[N];
int id(int x,int y) {return (x-1)*m+y;}
int dep[N],head[N];
void add_edge(int a,int b,int flow)
{cnt++;e[cnt].flow=flow;e[cnt].nx=head[a];e[cnt].to=b;head[a]=cnt;cnt++;e[cnt].flow=0;e[cnt].nx=head[b];e[cnt].to=a;head[b]=cnt;
}
bool used[210][210];
bool bfs(int s,int t)
{queue<int> que;memset(dep,0,sizeof(dep));que.push(s);dep[s]=1;while (!que.empty()){int x=que.front();que.pop();for (int i=head[x];i;i=e[i].nx){int y=e[i].to;if (dep[y]==0&&e[i].flow){dep[y]=dep[x]+1;que.push(y);}}}if (dep[t]==0) return false;else return true;
}
int dfs(int x,int limit,int t)
{if (x==t) return limit;int used=0;for (int i=head[x];i;i=e[i].nx){int y=e[i].to;if (dep[y]==dep[x]+1&&e[i].flow>0){int di=dfs(y,min(limit-used,e[i].flow),t);if (di>0){e[i].flow-=di;e[i^1].flow+=di;used+=di;if (used==limit) return used;}}}if (!used) dep[x]=-2;return used;
}
void dinic(int s,int t)
{while (bfs(s,t)) {ans+=dfs(s,INF,t);tot++;}
}
int main()
{scanf("%d%d%d",&n,&m,&p);s=N-3;t=N-4;for (int i=1;i<=p;i++){int x,y;scanf("%d%d",&x,&y);used[x][y]=true;}for (int i=1;i<=n;i++)for (int j=1;j<=m;j++)if (!used[i][j]){if (i%2==1) add_edge(s,id(i,j),1);else add_edge(id(i,j),t,1);}for (int i=1;i<=n;i++)for (int j=1;j<=m;j++){if (i%2!=1) continue;for (int k=1;k<=8;k++){int x=i+dx[k],y=j+dy[k];if (x<=0||y<=0||x>n||y>m) continue;if (used[x][y]) continue;add_edge(id(i,j),id(x,y),INF);}}dinic(s,t);printf("%d",n*m-ans-p);return 0;
}

转载于:https://www.cnblogs.com/Hale522520/p/10630742.html

长脖子鹿放置(最大流)相关推荐

  1. P5030 长脖子鹿放置

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

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

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

  3. 长脖子鹿省选模拟赛 [LnOI2019SP]快速多项式变换(FPT)

    本片题解设计两种解法 果然是签到题... 因为返回值问题T了好久... 第一眼:搜索大水题? 然后...竟然A了 1 #include<cstdio> 2 #include<queu ...

  4. [LnOI2019]长脖子鹿省选模拟赛 东京夏日相会

    这里来一发需要开毒瘤优化,并且几率很小一遍过的模拟退火题解... 友情提醒:如果你很久很久没有过某一个点,您可以加上特判 可以像 P1337 [JSOI2004]平衡点 / 吊打XXX 那道题目一样 ...

  5. [luogu#2019/03/10模拟赛][LnOI2019]长脖子鹿省选模拟赛赛后总结

    t1-快速多项式变换(FPT) 题解 看到这个\(f(x)=a_0+a_1x+a_2x^2+a_3x^3+ \cdots + a_nx^n\)式子,我们会想到我们学习进制转换中学到的,那么我们就只需要 ...

  6. 细水长flow之NICE:流模型的基本概念与实现

    作者丨苏剑林 单位丨广州火焰信息科技有限公司 研究方向丨NLP,神经网络 个人主页丨kexue.fm 前言:自从在机器之心上看到了 Glow 模型之后(下一个GAN?OpenAI提出可逆生成模型Glo ...

  7. stream 定长循环_Java8之Stream流代替For循环操作

    Stream流代替For循环进行输出可以使代码更简洁. 需求:根据姓名获取员工信息 1.建立实体类:Emp 2.测试类: (1.) 原始For写法: (2.) Stream流: 输出结果为: 补充知识 ...

  8. 电子产品“使用”和“放置”哪个寿命更长??

    电子产品"使用"和"放置"究竟哪个寿命更长不能一概而论. 首先说"使用","使用"造成的老化多见于较大功率/能量密度的部 ...

  9. 长颈鹿的脖子变长其实不是因为吃高处的树叶?科学家在1700万年前的化石中找到答案...

    6月3日,科研人员宣布通过奇异化石揭示长颈鹿演化谜题的关键驱动力.此前大家认为长颈鹿脖子伸长的动力是吃到高处的树叶,后来科学家发现,长脖子是雄性间为求偶竞争的武器.此次科研人员研究了一种奇异的早期长颈 ...

最新文章

  1. windoes windoes server 上安装mysql(MSI安装包安装、压缩包安装)
  2. php drive mssql,PHP 连接 MSSQL 2005/2008 以UTF8存取 并让ADODB支持的安装设置
  3. php后台无法登入,PHP magento后台无法登录问题解决方法
  4. WPF 使用FontAwesome字体图标
  5. ARP攻击网络上不去,可以进行mac地址绑定
  6. linux下anaconda3安装教程,Ubuntu18.04 安装 Anaconda3的教程详解
  7. Gartner:全行业投入人工智能,计算机视觉占比最高
  8. 2013年第8周日元宵节
  9. Oracle表重命名后索引、约束、权限、同义词的影响
  10. USB加密狗复制克隆软件
  11. kf真空接头标准尺寸_【真空】真空导入工艺详解!附具体操作步骤
  12. 计算机软件安装包后缀名,软件安装包程序是什么
  13. 三角形求高公式计算机,三角形已知边长求高公式有哪些
  14. sql server 字符串转成日期格式
  15. 蓝牙传输速率详细分析【针对蓝牙4.2]
  16. 多空线趋势策略-简易好用型
  17. SpringBoot + Java生成证书
  18. maven项目创建出错Could not calculate buil d plan:Plugin org.apache.maven.plugins 避坑
  19. Redis 基础 - 优惠券秒杀《初步优化(异步秒杀)》
  20. 用css解决Unigui在IE系列浏览器中字体变小的问题

热门文章

  1. python 不以科学计数法输出
  2. 经典永恒《魔兽世界》周年纪念
  3. 整数规划--分支定界法的Matlab实现
  4. 稀疏光流python_python光流法算法学习
  5. Pulsar集群搭建和基本命令使用
  6. ROS小海龟例程小海龟不移动问题
  7. OpenMP的介绍及简单使用(1)
  8. Operand should contain 1 column(s)
  9. 使用OSPF协议实现企业内部网络所有网段的互连互通
  10. 自己写的一个简单的迅雷下载支持断点续传