题目链接:bzoj2150

题目大意:

男主要占领A国。A国是一个M*N的矩阵,其中某些地方是城镇,某些地方是高山深涧。男主有一些军队,约定: 
1. 每支军队可以从任意一个城镇出发,只能从上往向下征战,不能回头。途中只能经过城镇,不能经过高山深涧。 
2. 如果某个城镇被某支军队到过,则其他军队不能再去那个城镇了。 
3. 每支军队都可以在任意一个城镇停止征战。 4. 所有军队都很奇怪,他们走的方法有点像国际象棋中的马。不过马每次只能走1*2的路线,而他们只能走R*C的路线。
假设每支军队都能顺利占领这支军队经过的所有城镇,问男主至少要多少支军队才能完成统一全国的大业。

题解:

求最大点独立集

跟bzoj3175差不多,把能走到的互相连边构图,求个最大点独立集。于是上匈牙利跑最大匹配,最后用总点数减掉就好了。

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define maxn 3000struct node
{int x,y,next;
}a[maxn*4];int len,first[maxn];
int tim,ask[maxn],bf[maxn];
int map[60][60];
void ins(int x,int y)
{++len;a[len].x=x;a[len].y=y;a[len].next=first[x];first[x]=len;
}
bool ffind(int x)
{for (int i=first[x];i!=-1;i=a[i].next)if (ask[a[i].y]!=tim){int y=a[i].y;ask[y]=tim;if (bf[y]==-1 || ffind(bf[y])){bf[y]=x;return true;}}return false;
}
int main()
{int n,m,r,c,i,j,ans,num;char x;scanf("%d%d%d%d",&n,&m,&r,&c);num=0;memset(map,0,sizeof(map));len=0;memset(first,-1,sizeof(first));for (i=1;i<=n;i++){scanf("\n");for (j=1;j<=m;j++){scanf("%c",&x);if (x=='.') map[i][j]=++num;}}for (i=1;i<=n;i++)for (j=1;j<=m;j++)if (map[i][j]){if (map[i+r][j+c]) ins(map[i][j],map[i+r][j+c]);if (map[i+r][j-c]) ins(map[i][j],map[i+r][j-c]);if (map[i+c][j+r]) ins(map[i][j],map[i+c][j+r]);if (map[i+c][j-r]) ins(map[i][j],map[i+c][j-r]);}tim=ans=0;memset(ask,0,sizeof(ask));memset(bf,-1,sizeof(bf));for (i=1;i<=num;i++){tim++;if (ffind(i)) ans++;}ans=num-ans;printf("%d\n",ans);return 0;
}

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] 简要题意: 给出一个矩阵,矩阵上的字符有两种,一种是'x',表示山洞(不可走),一种是'.',表示城镇 可以在城镇处放士兵,士兵经过的每个城镇都会被占领,士兵只能向下走, ...

  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. java 接口工程_Java工程师(15)抽象类与接口
  2. 电大本科计算机考试题库及答案,电大计算机考试题题库及答案.doc
  3. 接口隔离原则_设计模式六大原则
  4. 公证服务信息_使用多个公证员提高网络吞吐量
  5. 【转】4.3SharePoint服务器端对象模型 之 使用CAML进行数据查询(Part 3)
  6. 在…视域下是什么意思_电影中出现的出品人是什么意思?你需要了解下
  7. 殊途同归? 亚马逊和微软都选了云业务老大当公司CEO
  8. Android 使用SQLiteDatabase操作SQLite数据库(二)
  9. mysql python2_Python 16.2 使用MySQL
  10. ELK收集java日志
  11. Django官方文档
  12. linux下音乐转换软件下载,Ubuntu 下把Ape格式音乐转为Mp3格式
  13. 为什么浏览器全面禁用三方 Cookie
  14. python基础四 面向对象编程
  15. visual studio 提高速度的选项
  16. 方正BPM开发平台(FIX ES2007)帮助手册+知识库
  17. 中国(西部)云计算中心投产,将成西部规模最大数据中心
  18. Python用最简单的代码画出一箭穿心
  19. qt几种常见的打包安装程序工具
  20. 产品管理——产品PM你必须掌握的用户体验五大层

热门文章

  1. 详细讲解RNN+LSTM+Tree_LSTM(Tree-Long Short Term Memory)基于树状长短期记忆网络
  2. html 飘动的广告,很实用,很经典的jQuery漂浮广告
  3. 为什么手机里的小爱音响app里搜不到家里的小爱音箱_小米随身版小爱蓝牙音箱【开箱体验】,49的小爱音箱,值了...
  4. MATLAB实现三种基本排序(选择+冒泡+插入)
  5. 用Java写有关早上的语录,有关于早上太阳的优美精辟句子
  6. Junit5系列-什么是Junit5?
  7. 翻译_第五章:《Explainable Recommendation: A Survey and New Perspectives》可解释推荐系统综述
  8. 文件夹有把锁怎么去掉Linux,文件夹上的小黄锁如何取消?
  9. Spring Data MongoDB SpEL表达式注入漏洞安全风险通告第二次更新
  10. 从物联网架构分析物联网安全风险