每个守卫的上下左右四个方向上应当都是墙,而不能出现其他的守卫。



如图是一个合法的放置方案。每个守卫四个方向上都是墙(包括宫廷外墙)。



如图是一个非法的放置方案。位于 \((1,3)\) 的守卫的上左右三个方向是墙,下方却是另一个守卫;位于 \((4,3)\) 的守卫的下左右三个方向是墙,上方却是另一个守卫。

发现:每个守卫都必须要对应四面墙,每面墙也只能对应一名守卫。更特别地,当每个守卫的左方和上方有墙时,所有守卫的四方都对应了墙。

这样,把每堵墙的拆成右面和下面两个部分,每个右面都和一个下面对应一名守卫,互相匹配。

为了连边,可以开辅助数组 \(l_{i, j},u_{i, j}\) 分别表示 \((i, j)\) 位置对应的左墙和下墙的编号。

for(int i = 1; i <= m; ++i)
for(int j = 1; j <= n; ++j)
if(a[i][j] == 2)
continue;
else{
if(a[i][j - 1] == 2)
l[i][j] = ++cnt1;//对应新的左面。
else
l[i][j] = l[i][j - 1];//(i, j) 与 (i, j - 1) 对应同一个左面。
if(a[i - 1][j] == 2)
u[i][j] = ++cnt2;//对应新的下面。
else
u[i][j] = u[i - 1][j];//(i, j) 与 (i - 1, j) 对应同一个下面。
}

然后对于每一个位置,把它对应的左面和下面连上。

for(int i = 1; i <= m; ++i)
for(int j = 1; j <= n; ++j)
if(a[i][j] == 0)
add(l[i][j], u[i][j] + cnt1, 1), add(u[i][j] + cnt1, l[i][j], 0);

再连上源点、汇点,最大流即为答案。

洛谷 P1263 宫廷守卫的更多相关文章

  1. 洛谷P1263 宫廷守卫

    P1263 宫廷守卫 题目描述 从前有一个王国,这个王国的城堡是一个矩形,被分为M×N个方格.一些方格是墙,而另一些是空地.这个王国的国王在城堡里设了一些陷阱,每个陷阱占据一块空地. 一天,国王决定在 ...

  2. 洛谷P1263 || 巴蜀2311 宫廷守卫

    题目描述 从前有一个王国,这个王国的城堡是一个矩形,被分为M×N个方格.一些方格是墙,而另一些是空地.这个王国的国王在城堡里设了一些陷阱,每个陷阱占据一块空地. 一天,国王决定在城堡里布置守卫,他希望 ...

  3. 洛谷P4563 [JXOI2018]守卫(dp)

    题意 题目链接 Sol 非常有意思的题目. 我们设\(f[l][r]\)表示区间\([l,r]\)的答案. 显然\(r\)位置一定有一个保镖 同时不难观察到一个性质:拿\([1, n]\)来说,设其观 ...

  4. [洛谷P4563][JXOI2018]守卫

    题目大意:有一段$n(n\leqslant5\times10^3)$个点的折线,特殊点可以覆盖它以及它左边的它可以“看见”的点(“看见”指连线没有其他东西阻挡).定义$f_{l,r}$为区间$[l,r ...

  5. 【题解】宫廷守卫 [P1263]

    [题解]宫廷守卫 [P1263] 传送门:宫廷守卫 \([P1263]\) [题目描述] 给出一个 \(n*m\) 的方格图,分别用整数 \(0,1,2\) 表示空地.陷阱.墙,空地上可以放置守卫,如 ...

  6. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  7. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  8. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  9. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP

    题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...

随机推荐

  1. 数据分析--excel

    excel 的使用 1.excel基础 1.数据类型 数字类型 字符类型 注意: 1.普通文本:默认作对齐,左上方没有小绿点,数字默认又对齐 2.数字存储为文本类型,美容默认为左对齐,左上方有小绿点 ...

  2. 学习笔记(23)- plato-准备中文语料

    以plato使用的metalwoz数据集的INSURANCE为例,进行语料的汉化过程. 1. 下载数据集 微软的数据集,下载地址:https://www.microsoft.com/en-us/res ...

  3. java8中的常用日期操作

    java8有很多时间上的新api,在操作时间的时候很好用,这儿算是个备忘录吧,(补充中...) 定位某个时间:of方法 LocalDateTime dateTime = LocalDateTime.o ...

  4. Go类型断言

    package main import ( "fmt" ) type Point struct { x int y int } func main() { var a interf ...

  5. 如何在Windows中使用Eclipse访问虚拟机Linux系统中的hadoop(伪分布式)

    因为计算机配置过低,在虚拟机里几乎无法使用Eclipse,效率极低! 所以现在尝试使用Windows下Eclipse操作虚拟机中Hadoop,步骤如下: 开发环境:Hadoop2.7.1,Ubuntu ...

  6. python csv 读写操作

    import csv def read_csvList(path="./datasets/test.csv")->list: """return ...

  7. ASP.NET Core搭建多层网站架构【8.2-使用AutoMapper映射实体对象】

    2020/01/29, ASP.NET Core 3.1, VS2019, AutoMapper.Extensions.Microsoft.DependencyInjection 7.0.0 摘要:基 ...

  8. 惠普笔记本,如何选择U盘启动

    开机先连续点击键盘F9按键进入选择启动盘界面,找到自己的U盘(KingstonDataTraveler G3)

  9. C#加密解密(AES)-AESHelper

    原文地址:https://ken.io/note/csharp-aesencrypt using System; namespace Encrypt { public class AESHelper ...

  10. 探讨 Git 代码托管平台的若干问题

    关于 Git 版本控制软件种类繁多,维基百科收录的最早的版本控制系统是 1972 年贝尔实验室开发的 Source Code Control System.1986 年 Concurrent Vers ...