题意:

在一个m*n的01矩阵中,1表示可以走而0表示不能走;

每个部队可以走r*c的方格,并且只能向下而并不能向上;

每个1点能且只能让一个部队经过并占领,部队可以从任意1点开始;

求多少个部队可以占领全部1点;

n,m<=50,1<=r,c<=10

题解:

考虑每个1点都是可以从自身出发或者从上面的点到达;

而又只能去下面的另一个点,因此所有路径是不可能出现环的;

那么我们把一个点拆成两个,一个作为起点,一个作为终点;

在每个起点可以到达的终点之间连边,构成一个二分图;

由于最终每个点都要被到达,所以其实对于所有的起点都可以派兵去攻占它可以到达的终点;

而对于每一个终点,如果有边到达它并且从这个边有军队经过;

那么就不需要从这个点开始派兵,也就是说这个点是没有花费的;

那么我们统计出所有没有花费的点,其他的点就是有花费的咯;

显然没有花费的点数为这个二分图的匹配边数;

总点数闭着眼睛搞一下就好了;

所以说果然二分图这类的东西难在建图啊(笑);

代码:

#include<vector>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 25005
using namespace std;
vector<int>to[N];
bool map[100][100],vis[N];
int nex[10],ney[10],mat[N];
char str[100];
bool dfs(int x)
{int i,y;for(i=0;i<to[x].size();i++){if(vis[y=to[x][i]]==0){vis[y]=1;if(mat[y]==0||dfs(mat[y])){mat[y]=x;return 1;}}}return 0;
}
int main()
{int n,m,i,j,k,r,c,x,y,cnt=0,ans=0;scanf("%d%d%d%d",&n,&m,&r,&c);for(i=1;i<=n;i++){scanf("%s",str);for(j=0;j<m;j++){map[i][j+1]=str[j]=='.'?1:0;}}nex[1]=r,ney[1]=c;nex[2]=r,ney[2]=-c;nex[3]=c,ney[3]=r;nex[4]=c,ney[4]=-r;for(i=1;i<=n;i++){for(j=1;j<=m;j++){if(map[i][j])for(k=1,cnt++;k<=4;k++){if(i+nex[k]>0&&i+nex[k]<=n&&j+ney[k]>0&&j+ney[k]<=m&&map[i+nex[k]][j+ney[k]]){to[i*m+j-1].push_back((i+nex[k])*m+j+ney[k]-1);}}}}for(i=1;i<=n;i++){for(j=1;j<=m;j++){if(map[i][j]){memset(vis,0,sizeof(vis));if(dfs(i*m+j-1))ans++;}}}printf("%d",cnt-ans);return 0;
}

bzoj-2150 部落战争相关推荐

  1. BZOJ 2150: 部落战争 最大流

    2150: 部落战争 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php? ...

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

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

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

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

  4. 2150: 部落战争

    题目链接 题目大意:给出一张地图,一个军队要征战整个土地.一块土地只能经过一次,有X的地方不能走,军队只会走R*C个格子,只会向下走,问最少需要多少军队能够征战所有的土地 题解:比较naive的DAG ...

  5. BZOJ P2150 部落战争

    清明节也不能懈怠 虽然已经打了好久了隔膜了 但是你说不做题目也是不行的啊 今天学了一个公式:DAG的最小路径覆盖数=DAG图中的节点数-相应二分图中的最大匹配数. 感觉网上的证明也不太好,yy了一下自 ...

  6. (拆点+最小路径覆盖) bzoj 2150

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

  7. bzoj2150 部落战争 二分图匹配

    题目链接:戳这里 2150: 部落战争 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 1141  Solved: 631 [Submit][Stat ...

  8. [bzoj2150] 部落战争 二分图

    2150: 部落战争 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 951 Solved: 533 [Submit][Status][Discuss] ...

  9. 部落战争手游源码( 服务端+客户端+资源+开发文档)

    客户端:cocos2d-x C++开发 服务端:JAVA 数据库:Sql 下载地址:http://www.51xyyx.com/2733.html 下载地址:http://www.51xyyx.com ...

  10. 洛谷:P2172 [国家集训队]部落战争

    题目链接: P2172 [国家集训队]部落战争 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 解题思路: 很明显的二分图:将原点与它能走到的点连一条边,然后做一遍最小点覆盖:即选出 ...

最新文章

  1. vue 搭建脚手架 的教程
  2. J2EE详细入门教程--人员登入
  3. html canvas text 居中,HTML5 Canvas Text文本居中实例
  4. 【控制】《多智能体系统一致性与复杂网络同步控制》郭凌老师-第8章-Lurie 型动态网络自适应牵制控制
  5. 如何给页面加上loding_怎么做404页面?
  6. rgba的兼容性 IE
  7. es6 --- promise和async/await的区别
  8. ZooKeeper 典型应用场景有哪些?
  9. mysql 匹配所有记录_如何记录mysql中所有的查询
  10. 基于JAVA+SpringBoot+Mybatis+MYSQL的运动会管理系统
  11. Mysql学习总结(16)——Mysql之数据库设计规范
  12. 码农の带娃绝技:TensorFlow+传感器,200美元自制猜拳手套
  13. 十六、字符串和数组之间的转换
  14. grafana zabbix 模板_【Grafana教程】安装Grafana并配置Zabbix数据源
  15. C#基础9:虚函数与多态
  16. 创建crawlspider爬虫 学习笔记
  17. springboot1.5.4 log4j
  18. CAN FD安全通信
  19. c++ 求N个数的最大公约数和最小公倍数
  20. 老中医治蛋变成绿色了

热门文章

  1. 免费且开源的ssh工具,支持多平台,文件传输
  2. 网络工程师月入五万难不难?
  3. 物理引擎探究(10)---球碰撞旋转
  4. 区块链笔记(一)区块链的诞生
  5. JavaScript面向对象-封装
  6. 保护视力的4种锻炼方法和按摩护眼方法还有药膳
  7. 计算机毕业设计Java银创科技有限公司人事信息系统(系统+程序+mysql数据库+Lw文档)
  8. Swift String常用方法
  9. 67.220.90.12/bbs/index.php,对乌云漏洞库的分析.md
  10. 【C语言】实现字符串逆序输出(包含空格的字符串)