bzoj-2150 部落战争
题意:
在一个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 部落战争相关推荐
- BZOJ 2150: 部落战争 最大流
2150: 部落战争 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php? ...
- bzoj 2150: 部落战争 (最小路径覆盖)
2150: 部落战争 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 879 Solved: 493 [Submit][Status][Discus ...
- BZOJ 2150. 部落战争(最小路径覆盖问题)【BZOJ千题计划】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 刷题就图一乐 题目链接 https://hydro.ac/d/bzoj/p/2150 是 hydro ...
- 2150: 部落战争
题目链接 题目大意:给出一张地图,一个军队要征战整个土地.一块土地只能经过一次,有X的地方不能走,军队只会走R*C个格子,只会向下走,问最少需要多少军队能够征战所有的土地 题解:比较naive的DAG ...
- BZOJ P2150 部落战争
清明节也不能懈怠 虽然已经打了好久了隔膜了 但是你说不做题目也是不行的啊 今天学了一个公式:DAG的最小路径覆盖数=DAG图中的节点数-相应二分图中的最大匹配数. 感觉网上的证明也不太好,yy了一下自 ...
- (拆点+最小路径覆盖) bzoj 2150
2150: 部落战争 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 518 Solved: 298 [Submit][Status][Discus ...
- bzoj2150 部落战争 二分图匹配
题目链接:戳这里 2150: 部落战争 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 1141 Solved: 631 [Submit][Stat ...
- [bzoj2150] 部落战争 二分图
2150: 部落战争 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 951 Solved: 533 [Submit][Status][Discuss] ...
- 部落战争手游源码( 服务端+客户端+资源+开发文档)
客户端:cocos2d-x C++开发 服务端:JAVA 数据库:Sql 下载地址:http://www.51xyyx.com/2733.html 下载地址:http://www.51xyyx.com ...
- 洛谷:P2172 [国家集训队]部落战争
题目链接: P2172 [国家集训队]部落战争 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 解题思路: 很明显的二分图:将原点与它能走到的点连一条边,然后做一遍最小点覆盖:即选出 ...
最新文章
- vue 搭建脚手架 的教程
- J2EE详细入门教程--人员登入
- html canvas text 居中,HTML5 Canvas Text文本居中实例
- 【控制】《多智能体系统一致性与复杂网络同步控制》郭凌老师-第8章-Lurie 型动态网络自适应牵制控制
- 如何给页面加上loding_怎么做404页面?
- rgba的兼容性 IE
- es6 --- promise和async/await的区别
- ZooKeeper 典型应用场景有哪些?
- mysql 匹配所有记录_如何记录mysql中所有的查询
- 基于JAVA+SpringBoot+Mybatis+MYSQL的运动会管理系统
- Mysql学习总结(16)——Mysql之数据库设计规范
- 码农の带娃绝技:TensorFlow+传感器,200美元自制猜拳手套
- 十六、字符串和数组之间的转换
- grafana zabbix 模板_【Grafana教程】安装Grafana并配置Zabbix数据源
- C#基础9:虚函数与多态
- 创建crawlspider爬虫 学习笔记
- springboot1.5.4 log4j
- CAN FD安全通信
- c++ 求N个数的最大公约数和最小公倍数
- 老中医治蛋变成绿色了
热门文章
- 免费且开源的ssh工具,支持多平台,文件传输
- 网络工程师月入五万难不难?
- 物理引擎探究(10)---球碰撞旋转
- 区块链笔记(一)区块链的诞生
- JavaScript面向对象-封装
- 保护视力的4种锻炼方法和按摩护眼方法还有药膳
- 计算机毕业设计Java银创科技有限公司人事信息系统(系统+程序+mysql数据库+Lw文档)
- Swift String常用方法
- 67.220.90.12/bbs/index.php,对乌云漏洞库的分析.md
- 【C语言】实现字符串逆序输出(包含空格的字符串)