bzoj 2150
然后考虑正解
我们发现,最坏情况就是每个点都派驻军队,所以答案至多是“.”的数目
而且,每个点都至多只有一个入度和一个出度,所以我们可以将每个点拆成两个点,一个作为入点,一个作为出点,然后所有图上能到达的点由出点向入点建图
这样整个图就形成了一个二分图
然后在整个图上跑二分图匹配即可
答案即为“.”点数-二分图最大匹配数
稍微证明一下:我们的目的是最大化有入边的点的数量,那我们仅需让入点能更多的被匹配上即可
那也就是二分图匹配喽
#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
using namespace std;
struct Edge
{
int next;
int to;
}edge[];
int head[];
int maps[][];
char s[];
bool used[];
int f[];
int n,m,r,c;
int cnt=,cot;
queue <int> Q;
bool check(int x,int y)
{
if(x>&&x<=n&&y>&&y<=m&&maps[x][y])
{
return ;
}
return ;
}
void init()
{
memset(head,-,sizeof(head));
cnt=;
}
void add(int l,int r)
{
edge[cnt].next=head[l];
edge[cnt].to=r;
head[l]=cnt++;
}
int po(int x,int y)
{
return (x-)*m+y;
}
int ppo(int x,int y)
{
return (x-)*m+y+n*m;
}
bool dfs(int x)
{
for(int i=head[x];i!=-;i=edge[i].next)
{
int to=edge[i].to;
if(used[to])
{
continue;
}
used[to]=;
if(!f[to]||dfs(f[to]))
{
f[to]=x;
return ;
}
}
return ;
}
int hungary()
{
int ret=;
while(!Q.empty())
{
memset(used,,sizeof(used));
int u=Q.front();
Q.pop();
if(dfs(u))
{
ret++;
}
}
return ret;
}
int main()
{
freopen("legion.in","r",stdin);
freopen("legion.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&r,&c);
init();
for(int i=;i<=n;i++)
{
scanf("%s",s+);
for(int j=;j<=m;j++)
{
if(s[j]=='.')
{
maps[i][j]=;
Q.push(po(i,j));
cot++;
}else
{
maps[i][j]=;
}
}
}
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
int x0=i+r;
int y0=j+c;
if(check(x0,y0))
{
add(po(i,j),ppo(x0,y0));
}
x0=i+r;
y0=j-c;
if(check(x0,y0))
{
add(po(i,j),ppo(x0,y0));
}
x0=i+c;
y0=j+r;
if(check(x0,y0))
{
add(po(i,j),ppo(x0,y0));
}
x0=i+c;
y0=j-r;
if(check(x0,y0))
{
add(po(i,j),ppo(x0,y0));
}
}
}
printf("%d\n",cot-hungary());
return ;
}
bzoj 2150的更多相关文章
- BZOJ 2150: 部落战争 最大流
2150: 部落战争 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php? ...
- bzoj 2150 最小路径覆盖
最小路径覆盖问题是:给定一个DAG,该DAG的一个路径覆盖是一个路径的集合,使得每个点属于且仅属于其中一条路径,问题就是求一个大小最小的路径集合. 做法是将每个点A拆成两个点A1,A2,如果A-> ...
- BZOJ 2150 cogs 1861 [国家集训队2011]部落战争
题目描述 lanzerb的部落在A国的上部,他们不满天寒地冻的环境,于是准备向A国的下部征战来获得更大的领土. A国是一个M*N的矩阵,其中某些地方是城镇,某些地方是高山深涧无人居住.lanzerb把 ...
- BZOJ 2150 部落战争 (二分图匹配)
题目大意:给你一个n*m的棋盘,有一些坏点不能走,你有很多军队,每支军队可以像象棋里的马一样移动,不过马是1*2移动的,而军队是r*c移动的,军队只能从上往下移动,如果一个点已经被一直军队经过,那么其 ...
- 8月清北学堂培训 Day6
今天是杨思祺老师的讲授~ 图论 双连通分量 在无向图中,如果无论删去哪条边都不能使得 u 和 v 不联通, 则称 u 和 v 边双连通: 在无向图中,如果无论删去哪个点(非 u 和 v)都不能使得 u ...
- DP&图论 DAY 6 上午
DP&图论 DAY 6 上午 双连通分量 从u-->v不存在必经边,点 点双连通分量 边双连通分量 点/边双连通分量缩点之后变成一个树 找连通块的时候不越过割点或者桥 P3469 [ ...
- BZOJ刷题指南(转)
基础(65) 巨水无比(4):1214.3816:2B题:1000A+B:2462:输出10个1 模拟/枚举/暴力(15):4063傻子模拟:1968小学生暴力:1218前缀和暴力:3856读英文:4 ...
- BZOJ 2127: happiness [最小割]
2127: happiness Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 1815 Solved: 878[Submit][Status][Di ...
- BZOJ 3275: Number
3275: Number Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 874 Solved: 371[Submit][Status][Discus ...
随机推荐
- python中的私有变量
class Test1: def f1(self): self.name ="张三" self.__age = 20 #使用名称变形实现私有变量 print(self.name) ...
- Codeforces Round #545 (Div. 2)(B. Circus)
题目链接:http://codeforces.com/contest/1138/problem/B 题目大意:贼绕口的题目,就是给你两个字符串s1,s2,然后每一个人代表一列,第一列代表技能一每个人是 ...
- mongodb第二篇文章~关于集群认证的那点事
集群认证简介:上一篇咱们介绍了单实力的认证方式,正好我在搞lepus监控,副本集合需要用户认证 一 验证方式: 1 auth 方式启动=>单点 2 keyFile 方式启动=>集群 ...
- javascript面试--网络收集
史上最全的Javascript面试题总结(内附答案) - CSDN博客http://blog.csdn.net/u011277123/article/details/70208768 6.什么是未声明 ...
- Redis随笔
dump.rdb:快照文件 删除这个文件 rm -f dump.rdb 第一步:创建6个redis实例,端口号从7001~7006 第二步:修改redis的配置文件 1.修改端口号 修改redis.c ...
- 负载均衡集群中的session解决方案【转】
通常面临的问题 从用户端来解释,就是当一个用户第一次访问被负载均衡代理到后端服务器A并登录后,服务器A上保留了用户的登录信息:当用户再次发送请求时, 根据负载均衡策略可能被代理到后端不同的服务器,例如 ...
- vue之登录和token处理
应用场景一 Vue刷新token,判断token是否过期.失效,进行登录判断跟token值存储 刷新token和token是否过期的操作都是由后端实现,前端只负责根据code的不同状态来做不同的操作: ...
- 关于DateTime自带的AddSeconds等函数的坑
在此记录一下今天在写一个进程查杀小程序时碰到的关于DateTime的问题: 第一次是用AddSeconds后的时间直接和DateTime.Now做相等判断. class Program { stat ...
- C++游戏开发需要阅读的书籍
如果要自学游戏程序开发的话,可以看看下面的,呵呵. 游戏开发资料(PDF书都是中文版的,非英文,很多是本人自己扫描制作,从未网上发布过,所以独家啦): 1.Gamebryo 2.2游戏引擎(盛大.腾 ...
- Winform调用百度地图接口简单示例
1.首先用一个html文件调用百度地图接口(主要注册一个序列号): <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitiona ...