题目

Description

在美鱼和理树后援团拯救世界的同时,外表柔弱的理树也开始坚强起来,思考着离开这个世界的办法。误打误撞地,她遇上了正在教室破坏课桌打开迷宫入口的沙耶。沙耶告诉理树,这个世界的出口就是这个迷宫的出口。于是理树毫不犹豫地跟沙耶一起跳进了迷宫。在迷宫里,两个女孩子互帮互助,一会儿割绳子,一会儿泡温泉,一会儿雕冰块,跌跌撞撞地走到了终点。不出所料,终点也有一个机关在等着她们。

终点的机关是一个立着的m*n 的方格棋盘,在有些格子上放了一个玩偶,而有些地方直接挖了个大坑。只有取走所有玩偶才能打开出口。但是,由于奇怪的设定,理树和沙耶不能直接触碰玩偶,他们需要操纵机器人来收集它。机器人的走法很奇怪,和国际象棋的马有点像,只不过马可以走任意方向的1*2 路线,它们只会由上往下走r*c(或c*r)的路线,不能回头。而机器人一旦经过一个有玩偶的格子,那个格子上的玩偶将被回收,并且在机器人离开时,那个格子会变成一个坑。理树可以把机器人放在任何一个有玩偶的格子上作为起点,也可以在任何一个有玩偶的格子回收机器人。机器人行走可以视为瞬移,只不过每一次设置新起点都会消耗1 时间。并且,有坑的格子不能落脚。

就在这个紧要关头,玩偶狂热爱好者的沙耶却流着口水智商归0。理树不得不转而求助你,帮忙计算出最少多少时间就能收集到所有玩偶。

Input

第一行包含4 个整数M、N、R、C,意义见问题描述。接下来M 行每行一个长度为N 的

字符串。如果某个字符是'.',表示这个地方有一个玩偶;如果这个字符是'x',表示这个地

方是坑。

Output

输出一个整数,表示最短时间。

Sample Input

3 3 1 2
...
.x.
...

Sample Output

4

Data Constraint

30%的数据中,1<=M,N<=4,1<=R,C<=3。

70%的数据中,1<=M<=20,1<=N<=4,1<=R,C<=3。

100%的数据中,1<=M,N<=50,1<=R,C<=10。

Hint

分析

  • 首先标点,然后跑二分图
  • 答案=空格数-最大匹配

代码

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<vector>
 5 using namespace std;
 6 long long n,m,x,y,ans,link[100001],s[205][205],p,ss;
 7 vector<int> f[10001];
 8 bool cover[100001];
 9 int map[100][100],rk[100][100];
10 bool find(int i)
11 {
12      for (int k=0;k<f[i].size();k++)
13        if (!cover[f[i][k]])
14        {
15            int j=f[i][k];
16            cover[j]=true;
17            int q=link[j];
18            link[j]=i;
19            if (q==0||find(q)) return true;
20            link[j]=q;
21         }
22     return false;
23 }
24 int main()
25 {
26     int n,m,r,c;
27     cin>>n>>m>>r>>c;
28     char num;
29     int fx[4][2]={{r,c},{c,r},{r,-c},{c,-r}};
30     int cnt=0,tot=0;
31     for (int i=1;i<=n;i++)
32       for (int j=1;j<=m;j++)
33       {
34            cin>>num;
35            if (num=='.') map[i][j]=1,rk[i][j]=++cnt;
36            else tot++;
37       }
38     for (int i=1;i<=n;i++)
39       for (int j=1;j<=m;j++)
40            for (int k=0;k<4;k++)
41            {
42                 int ax=i+fx[k][0],ay=j+fx[k][1];
43                 if (ax>n||ay>m||ax<1||ay<1||!map[ax][ay]) continue;
44                 f[rk[i][j]].push_back(rk[ax][ay]);
45            }
46      int ans=0;
47      for (int i=1;i<=n;i++)
48      {
49          for (int j=1;j<=m;j++)
50          {
51              if (map[i][j]==1)
52              {
53                  memset(cover,0,sizeof(cover));
54                 ans+=find(rk[i][j]);
55              }
56          }
57      }
58      cout<<n*m-tot-ans;
59 }

转载于:https://www.cnblogs.com/zjzjzj/p/11361667.html

JZOJ 3457. 【NOIP2013模拟联考3】沙耶的玩偶(doll)相关推荐

  1. JZOJ 3461. 【NOIP2013模拟联考5】小麦亩产一千八(kela)

    3461. [NOIP2013模拟联考5]小麦亩产一千八(kela) (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Det ...

  2. jzoj 3461. 【NOIP2013模拟联考5】小麦亩产一千八(math)

    3461. [NOIP2013模拟联考5]小麦亩产一千八 Description "有了金坷垃,肥料一袋能顶两袋撒,小麦亩产一千八,吸收两米下的氮磷钾--",话说HYSBZ(Hen ...

  3. JZOJ 3468. 【NOIP2013模拟联考7】OSU!(osu)

    Description osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为一个长 ...

  4. JZOJ 3456. 【NOIP2013模拟联考3】恭介的法则(rule)

    题目 Description 终于,在众亲们的奋斗下,最终boss 恭介被关进了库特设计的密室.正当她们松了一口气时,这个世界却发生了天翻覆地的变化:地面开始下沉,天空开始变成血红色,海水沸腾--一幅 ...

  5. JZOJ 3455. 【NOIP2013模拟联考3】库特的向量(code)

    题目 Description 从前在一个美好的校园里,有一只(棵)可爱的弯枝理树.她内敛而羞涩,一副弱气的样子让人一看就想好好疼爱她.仅仅在她身边,就有许多女孩子想和她BH,比如铃,库特,等等.不过, ...

  6. [jzoj 3461]【NOIP2013模拟联考5】小麦亩产一千八 {Fibonacci数列}

    题目 Description "有了金坷垃,肥料一袋能顶两袋撒,小麦亩产一千八,吸收两米下的氮磷钾--",话说HYSBZ(Hengyang School for Boys & ...

  7. 【NOIP2013模拟联考5】军训(training)

    Description HYSBZ 开学了!今年HYSBZ 有n 个男生来上学,学号为1-n,每个学生都必须参加军训.在这种比较堕落的学校里,每个男生都会有Gi 个女朋友,而且每个人都会有一个欠扁值H ...

  8. 【NOIP2013模拟联考6】选课(select)

    Description 你真的认为选课是那么容易的事吗?HYSBZ的ZY同志告诉你,原来选课也会让人产生一种想要回到火星的感觉.假设你的一周有n天,那么ZY编写的选课系统就会给你n堂课.但是该系统不允 ...

  9. 【NOIP2013模拟联考5】休息(rest)

    Description 休息的时候,可以放松放松浑身的肌肉,打扫打扫卫生,感觉很舒服.在某一天,某LMZ 开始整理他那书架.已知他的书有n 本,从左到右按顺序排列.他想把书从矮到高排好序,而每一本书都 ...

最新文章

  1. LeetCode简单题之二进制表示中质数个计算置位
  2. python3打开文件的代码_Python3 对文件操作
  3. python用于什么-python用于什么
  4. (转载)cmd-命令大全及详解
  5. 【caffe-MATLAB】自己编译faster-rcnn的MATLAB版本
  6. 使用 csv 导入的方式在 SAP S/4HANA 里创建 employee 数据
  7. C++this指针的用途
  8. dev c++ 报错[Error] ld returned 1 exit status 的解决办法
  9. javaweb实现学生管理系统
  10. Unity游戏建议对话功能 Fungus插件。
  11. iOS测试之移动App测试指南
  12. python selenium下载图片_用selenium自动加载浏览器下载图片
  13. oracle exadata中国保有量,怎样购买Exadata?
  14. maxscale连接mysql_MaxScale实现mysql读写分离,负载均衡
  15. TP6使用session
  16. 抛弃光驱,让你的U盘变光驱,制作USB-CDROM,用U盘安装系统
  17. Windows 10出现0xc0000225错误代码如何解决?
  18. SAP AFS Arun 增强 出口 介绍
  19. Centos系统下搭建Smokeping 方法
  20. Ubuntu Linux 系统 键盘错乱 ,按键与输出不一致

热门文章

  1. 【转】JAVA中的浅拷贝和深拷贝
  2. SCDPM 2012R2之保护SQL SERVER
  3. Use Amazon VM to try Openstack (1) (with DevStack)
  4. 安装 pear、phpunit 测试用例步骤方法
  5. silverlight 学习笔记 (七):Prism的第一个应用
  6. 问题 K: 数字统计
  7. 同一个电脑安装几个MATLAB,同一个版本的matlab、同一个.m文件,为何一个顺利执行、另一个出错?...
  8. zookeepe安装配置_Zookeeper安装配置及简单使用
  9. python中的for in 语句_2、python,for..in语句
  10. 如何查看linux的版本?