bzoj 2150: 部落战争 (最小路径覆盖)
2150: 部落战争
Time Limit: 10 Sec Memory Limit: 259 MB
Submit: 879 Solved: 493
[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。
HINT
Source
[Submit][Status][Discuss]
题解:最小路径覆盖
有一个关于二分图的结论:最小路径覆盖=二分图总点数-最大匹配数
我们在建图的时候将每个点都拆成两个点——入点和出点,如果可以从x走到y,就从x的出点向y的入点连边,然后跑二分图的最大匹配即可。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#define N 50003
using namespace std;
int n,m,point[N],next[N],v[N],belong[N],cur[N],r,c;
int map[53][53],tot;
void add(int x,int y)
{tot++; next[tot]=point[x]; point[x]=tot; v[tot]=y;//tot++; next[tot]=point[y]; point[y]=tot; v[tot]=x;
}
bool find(int x,int k)
{for (int i=point[x];i;i=next[i]){if (cur[v[i]]==k) continue;cur[v[i]]=k;if (!belong[v[i]]||find(belong[v[i]],k)) {belong[v[i]]=x;return true;}}return false;
}
int main()
{freopen("a.in","r",stdin);scanf("%d%d%d%d",&n,&m,&r,&c);int base=n*m; int size=0;for (int i=1;i<=n;i++){char s[53]; scanf("%s",s+1);for (int j=1;j<=m;j++)if (s[j]!='x') map[i][j]=1;else size++;}for (int i=1;i<=n;i++)for (int j=1;j<=m;j++)if (map[i][j]) {int x=i+r; int y=j+c;if (x>0&&y>0&&x<=n&&y<=m&&map[x][y]) add((i-1)*m+j,(x-1)*m+y+base);x=i+r; y=j-c;if (x>0&&y>0&&x<=n&&y<=m&&map[x][y]) add((i-1)*m+j,(x-1)*m+y+base);x=i+c; y=j+r;if (x>0&&y>0&&x<=n&&y<=m&&map[x][y]) add((i-1)*m+j,(x-1)*m+y+base);x=i+c; y=j-r;if (x>0&&y>0&&x<=n&&y<=m&&map[x][y]) add((i-1)*m+j,(x-1)*m+y+base);}int ans=0;for (int i=1;i<=n;i++)for (int j=1;j<=m;j++){int t=(i-1)*m+j;if (find(t,t)) ans++;}printf("%d\n",n*m-size-ans);
}
bzoj 2150: 部落战争 (最小路径覆盖)相关推荐
- bzoj2150部落战争 最小路径覆盖
http://www.lydsy.com/JudgeOnline/problem.php?id=2150 之前一直不会的二分图. 然后百度百科普及了一下有关最小路径覆盖的知识. 详情请见:http:/ ...
- BZOJ 2150. 部落战争(最小路径覆盖问题)【BZOJ千题计划】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 刷题就图一乐 题目链接 https://hydro.ac/d/bzoj/p/2150 是 hydro ...
- BZOJ 2150: 部落战争 最大流
2150: 部落战争 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php? ...
- 51nod_2929 部落战争(DAG最小路径覆盖)
部落战争 Problem Description lanzerb的部落在A国的上部,他们不满天寒地冻的环境,于是准备向A国的下部征战来获得更大的领土. A国是一个M*N的矩阵,其中某些地方是城镇,某些 ...
- (拆点+最小路径覆盖) bzoj 2150
2150: 部落战争 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 518 Solved: 298 [Submit][Status][Discus ...
- 【网络流24题】最小路径覆盖问题
[题目]1738: 最小路径覆盖问题 [题解]网络流 关于输出路径,因为即使有反向弧经过左侧点也一定会改变左侧点的去向,若没连向右侧就会被更新到0,所以不用在意. mark记录有入度的右侧点,然后从没 ...
- 最大匹配、最小顶点覆盖、最大独立集、最小路径覆盖(转)
在讲述这两个算法之前,首先有几个概念需要明白: 二分图: 二分图又称二部图,是图论中的一种特殊模型.设G=(V,E)是一个无向图,如果顶点V可以分割为两个互不相交的子集(A,B),并且图中的每条边( ...
- 有向图最小路径覆盖方法浅析、证明 //hdu 3861
路径覆盖就是在图中找一些路径,使之覆盖了图中的所有顶点,且任何一个顶点有且只有一条路径与之关联. 对于一个有向无环图怎么求最小路径覆盖? 先构造二分图: 对于原图,先拆点,吧每个点i拆成ii,iii. ...
- HDU4160(最小路径覆盖问题)
题意:当满足条件wi<wj,hi<hl和li<lj时,求解通过优化嵌套给定的娃娃可以获得的最外层洋娃娃的最小数量. 思路:如果嵌套的娃娃越多,则剩下的娃娃就越少,意味着单独出来的娃娃 ...
最新文章
- 推荐几款好用又免费的项目管理工具
- DAY11-MYSQL之ORM框架SQLAlchemy
- 神策 FM | 数据驱动时代,你的岗位如何转变?
- 记录几款比较好用的jquery插件
- 程序人生:提高编程逻辑的 10 种最“疯狂”的方法
- 飞畅科技告诉你什么是集成串口服务器POE交换机?
- iOS UI-常用控件
- 在java代码中设置TextView文本内容可滚动
- 智能手机收邮件之Mobile
- 【须弥SUMERU】宜信分布式安全服务编排实践
- Spring_day1
- 不要再问类似如C++和C#谁好谁坏,谁更有前景的问题
- 6675温度波动大_现场温度仪表安装调试常见的故障分析与处理方法
- 风变编程python离线版_如何看待风变编程的Python网课
- 一个英文字母,一个中文各占多少字节
- 如何打开损坏的PDF文件查看内容并修复
- ToDoListEditor 任务清单工具
- 使用环信sdk做一个简单的聊天APP
- 计算机需要那些高中数学知识点,高中数学-知识点总结-最全版.doc
- 网站管理助手4.0 mysql_网站管理助手v4.0 建站流程
热门文章
- HNU工训中心STC-B学习板大作业-基于OLED模块的多功能MP4
- 修改战网服务器,《使命召唤17》战网地区怎么改 战网地区修改方法分享
- word中打字会覆盖下一个字
- 20160124.CCPP详解体系(0003天)
- MDB Jet.OLEDB.4.0(32位)和 ACE.OLEDB.12.0 ACCDB(64位)的区别
- 牧牛区块链,区块链发展呈现的新机遇
- 关于苹果销量的一些看法
- 高级工程师做事方法总结篇
- 【转载】中国哲学基础及中国文化
- 支付宝集五福神器来了!100多张额外福卡,集不齐你打我