【传送门:BZOJ2150】


简要题意:

  给出一个矩阵,矩阵上的字符有两种,一种是'x',表示山洞(不可走),一种是'.',表示城镇

  可以在城镇处放士兵,士兵经过的每个城镇都会被占领,士兵只能向下走,而且行走的方式和马相似,不过马走的是1*2,士兵走的是R*C,士兵不能经过一个被占领的城镇

  求出最少派出多少个士兵能够占领所有城镇


题解:

  最小路径覆盖问题,用二分图匹配

  将所有城镇拆成两个集合

  如果x能走到y,则x连向y的第二个集合的点

  然后将总点数-最大匹配数就是最小路径覆盖数了


参考代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdlib>
using namespace std;
char st[51][51];
struct node
{int x,y,next;
}a[21000];int len,last[6100];
void ins(int x,int y)
{len++;a[len].x=x;a[len].y=y;a[len].next=last[x];last[x]=len;
}
int dx[5],dy[5];
int n,m,r,c;
int p(int x,int y){return (x-1)*m+y;}
int match[6100],chw[6100];
bool findmuniu(int x,int t)
{for(int k=last[x];k;k=a[k].next){int y=a[k].y;if(chw[y]!=t){chw[y]=t;if(match[y]==0||findmuniu(match[y],t)==true){match[y]=x;return true;}}}return false;
}
int main()
{scanf("%d%d%d%d",&n,&m,&r,&c);for(int i=1;i<=n;i++) scanf("%s",st[i]+1);len=0;memset(last,0,sizeof(last));dx[1]=r;dy[1]=-c;dx[2]=r;dy[2]=c;dx[3]=c;dy[3]=-r;dx[4]=c;dy[4]=r;int sum=0;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(st[i][j]=='.'){sum++;for(int k=1;k<=4;k++){int tx=i+dx[k],ty=j+dy[k];if(tx<1||ty<1||tx>n||ty>m||st[tx][ty]=='x') continue;ins(p(i,j),p(tx,ty)+n*m);}}}}memset(chw,0,sizeof(chw));memset(match,0,sizeof(match));for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(st[i][j]=='.'){int t=p(i,j);if(findmuniu(t,t)==true) sum--;}}}printf("%d\n",sum);return 0;
}

转载于:https://www.cnblogs.com/Never-mind/p/8630246.html

BZOJ2150: 部落战争相关推荐

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

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

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

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

  3. [BZOJ2150]部落战争-二分图匹配

    部落战争 Description lanzerb的部落在A国的上部,他们不满天寒地冻的环境,于是准备向A国的下部征战来获得更大的领土. A国是一个MN的矩阵,其中某些地方是城镇,某些地方是高山深涧无人 ...

  4. bzoj2150 部落战争

    题目链接:bzoj2150 题目大意: 男主要占领A国.A国是一个M*N的矩阵,其中某些地方是城镇,某些地方是高山深涧.男主有一些军队,约定:  1. 每支军队可以从任意一个城镇出发,只能从上往向下征 ...

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

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

  6. bzoj-2150 部落战争

    题意: 在一个m*n的01矩阵中,1表示可以走而0表示不能走: 每个部队可以走r*c的方格,并且只能向下而并不能向上: 每个1点能且只能让一个部队经过并占领,部队可以从任意1点开始: 求多少个部队可以 ...

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

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

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

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

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

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

最新文章

  1. CentOS安装编译环境
  2. WiFi CC3200模块 加速IOT物联网发展
  3. vSphere 6.5 新功能 (1) - 全功能 vCenter S
  4. 台湾国立大学郭彦甫Matlab教程笔记(14)polynomial differentiation多项式微分
  5. 从0系统学 Android--1.1认识 Android
  6. boost::phoenix::bind相关的测试程序
  7. GBin1专题之Web热点秀#15
  8. 【超级详细的小白教程】Hexo 搭建自己的博客
  9. javascript高级知识点——继承
  10. 获取客户端上次请求的URL
  11. mvc 调试 f12 浏览器闪退
  12. Splay模板 1.0
  13. 教你微软原版win7下载安装教程
  14. vue+element+springboot前后端分离项目整合pageoffice实现在线编辑Word和Excel跟签章等
  15. 单基因gsea_JTO:日本Smoker基因组综合分析
  16. Mac如何破解管理员密码
  17. 最全支付系统设计包含:账户,对账,风控...
  18. 从华为跳槽来腾讯的体验...
  19. 麻省理工大学公开课笔记:算法导论(二)——课程简介及算法分析
  20. UPC2022/3/18 晚训练赛补题

热门文章

  1. Java类的继承关键字_Java的第八天(类的继承、super关键字的使用、方法的重写)...
  2. dedecms怎么改php版本_PHP程序员进阶之路
  3. jquery点击事件传值加载页面_jQuery添加options点击事件并传值
  4. k8s pod内部容器_第三章 pod:运行于kubernetes中的容器
  5. hdfs复制文件夹_HDFS常用命令
  6. 路由算法及路由协议(详解)
  7. LeetCode 643. 子数组最大平均数 I
  8. LeetCode 1290. 二进制链表转整数
  9. LeetCode 676. 实现一个魔法字典(哈希)
  10. 动态规划算法(Dynamic Programming)之0-1背包问题