2150: 部落战争

Time Limit: 10 Sec  Memory Limit: 259 MB
Submit: 518  Solved: 298
[Submit][Status][Discuss]

Description

lanzerb的部落在A国的上部,他们不满天寒地冻的环境,于是准备向A国的下部征战来获得更大的领土。 A国是一个M*N的矩阵,其中某些地方是城镇,某些地方是高山深涧无人居住。lanzerb把自己的部落分成若干支军队,他们约定: 1. 每支军队可以从任意一个城镇出发,并只能从上往向下征战,不能回头。途中只能经过城镇,不能经过高山深涧。 2. 如果某个城镇被某支军队到过,则其他军队不能再去那个城镇了。 3. 每支军队都可以在任意一个城镇停止征战。 4. 所有军队都很奇怪,他们走的方法有点像国际象棋中的马。不过马每次只能走1*2的路线,而他们只能走R*C的路线。 lanzerb的野心使得他的目标是统一全国,但是兵力的限制使得他们在配备人手时力不从心。假设他们每支军队都能顺利占领这支军队经过的所有城镇,请你帮lanzerb算算至少要多少支军队才能完成统一全国的大业。

Input

第一行包含4个整数M、N、R、C,意义见问题描述。接下来M行每行一个长度为N的字符串。如果某个字符是'.',表示这个地方是城镇;如果这个字符时'x',表示这个地方是高山深涧。

Output

输出一个整数,表示最少的军队个数。

Sample Input

【样例输入一】
3 3 1 2
...
.x.
...
【样例输入二】
5 4 1 1
....
..x.
...x
....
x...

Sample Output

【样例输出一】
4

【样例输出二】
5
【样例说明】

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

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<vector>
#include<set>
#include<stack>
#include<map>
using namespace std;
vector<int> e[5001];
int n,m,r,c,mp[51][51],lnk[5001],mark[5001];
char s[51][51];
bool dfs(int x)
{for(int i=0;i<e[x].size();i++){int v=e[x][i];if(mark[v]==-1){mark[v]=1;if(lnk[v]==-1||dfs(lnk[v])){lnk[v]=x;return true;}}}return false;
}
int main()
{int cnt=0;memset(lnk,-1,sizeof(lnk));scanf("%d%d%d%d",&n,&m,&r,&c);for(int i=0;i<n;i++)scanf("%s",s[i]);for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(s[i][j]=='.')mp[i][j]=++cnt;}}for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(mp[i][j]){if(i+r<n&&j+c<m&&mp[i+r][j+c]){e[mp[i][j]].push_back(mp[i+r][j+c]+cnt);}if(i+c<n&&j+r<m&&mp[i+c][j+r]){e[mp[i][j]].push_back(mp[i+c][j+r]+cnt);}if(i+r<n&&j-c>=0&&mp[i+r][j-c]){e[mp[i][j]].push_back(mp[i+r][j-c]+cnt);}if(i+c<n&&j-r>=0&&mp[i+c][j-r]){e[mp[i][j]].push_back(mp[i+c][j-r]+cnt);}}}}int ans=0;for(int i=1;i<=cnt;i++){memset(mark,-1,sizeof(mark));if(dfs(i))ans++;}printf("%d\n",cnt-ans);return 0;
}

  

转载于:https://www.cnblogs.com/water-full/p/4470487.html

(拆点+最小路径覆盖) bzoj 2150相关推荐

  1. bzoj 2150: 部落战争 (最小路径覆盖)

    2150: 部落战争 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 879  Solved: 493 [Submit][Status][Discus ...

  2. BZOJ 2150. 部落战争(最小路径覆盖问题)【BZOJ千题计划】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 刷题就图一乐 题目链接 https://hydro.ac/d/bzoj/p/2150 是 hydro ...

  3. bzoj2150部落战争 最小路径覆盖

    http://www.lydsy.com/JudgeOnline/problem.php?id=2150 之前一直不会的二分图. 然后百度百科普及了一下有关最小路径覆盖的知识. 详情请见:http:/ ...

  4. 有向图最小路径覆盖方法浅析、证明 //hdu 3861

    路径覆盖就是在图中找一些路径,使之覆盖了图中的所有顶点,且任何一个顶点有且只有一条路径与之关联. 对于一个有向无环图怎么求最小路径覆盖? 先构造二分图: 对于原图,先拆点,吧每个点i拆成ii,iii. ...

  5. HDU4160(最小路径覆盖问题)

    题意:当满足条件wi<wj,hi<hl和li<lj时,求解通过优化嵌套给定的娃娃可以获得的最外层洋娃娃的最小数量. 思路:如果嵌套的娃娃越多,则剩下的娃娃就越少,意味着单独出来的娃娃 ...

  6. 最大流 ---- 最小路径覆盖 ---- P2765魔术球问题(网络流24题)

    题目链接 解题思路: 这题题目看起来根本不像网络流但是确实用网络流做的 这个题目有两个限制 每个柱子上面的球相邻两个的和必须是平方数 球的编号必须是连续的 首先我们只考虑第一个条件的话,我们怎么转化成 ...

  7. 二分图专题系列各大知识点总结(匈牙利,染色法,最大独立集,最小点覆盖,最小路径覆盖)

    本文概论 二分图的判断方法:图中不存在奇数环----->染色法判断二分图不存在矛盾 二分图: 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i, ...

  8. 【网络流24题】D、魔术球问题(有向无环图的最小路径覆盖、思维)

    D.魔术球问题(有向无环图的最小路径覆盖.思维)[省选/NOI- ] P2765 魔术球问题 [问题分析] 枚举答案转化为判定性问题,然后最小路径覆盖,可以转化成二分图最大匹配,从而用最大流解决. [ ...

  9. 【网络流24题】解题报告:C、最小路径覆盖问题(有向无环图最小路径覆盖)(最大流)

    C.最小路径覆盖问题(有向无环图最小路径覆盖)(最大流)[省选/NOI- ] 拆点最大流 [问题分析] 有向无环图最小路径覆盖,可以转化成二分图最大匹配问题,从而用最大流解决. [建模方法] 构造二分 ...

最新文章

  1. 【Qt】错误GL/gl.h: No such file or directory的解决方法(以及cannot find -lGL解决方法)
  2. 掌握 analyze API,一举搞定 Elasticsearch 分词难题
  3. android上使用git
  4. discuz数据库迁移,改密码后,相关配置文件修改
  5. 工作337:pc-ele-ment联查问题
  6. 卸载centos7自带mysql_centos7完全卸载mysql
  7. 《搭建Centos7之一》
  8. http://www.oreilly.com/catalog/errataunconfirmed.csp?isbn=9780596529321
  9. Asterconference Asia 2012 中国大会
  10. 本博客自排名1000到400的各项数据变化
  11. 如何使用KeyChain保存和获取UDID
  12. 嵌入式ttf字体裁减说明
  13. 毕啸南专栏 | 对话阿里王坚:数据价值是新大陆,新技术将重构互联网
  14. 金蝶如何用计算机,金蝶软件要换电脑用,该怎么处理?
  15. hdmi 计算机 接口类型,四大常用视频接口对比,你的电脑是哪种接口?
  16. Java版推箱子(搬箱子)游戏开发入门示例及源码
  17. CRAFT: Character Region Awareness for Text Detection ---- 论文翻译
  18. 【一文带你读懂机器学习】逻辑回归原理
  19. C#使用原生方法将文字朗读出来
  20. 主流 CTR 模型综述

热门文章

  1. ecs和eks 比较_如何使用Kubernetes,EKS和NGINX为网站设置DNS
  2. html5编写网页代码_freeCodeCamp.org的未来-从向世界传授语言到编写代码的5年经验...
  3. 初步了解:使用JavaScript进行表达式(De Do Do Do,De Da Da Da)
  4. 使用Fiddler进行HTTP流量分析
  5. Python 数据库操作 psycopg2
  6. 职称计算机word2007难吗,职称计算机word2007原题
  7. java se13安装教程_在Linux发行版中安装Java 13/OpenJDK 13的方法
  8. python游戏结束显示分数代码_当游戏循环在Python中运行时,多线程来显示游戏分数?...
  9. perl:cpanm安装方式的一种取代方法
  10. 内科学与计算机专业的相关性,急性心肌梗死患者QT间期变异性及心率变异性与室性心律失常的相关性分析-内科学专业论文.docx...