BZOJ 2150 cogs 1861 [国家集训队2011]部落战争
题目描述
lanzerb的部落在A国的上部,他们不满天寒地冻的环境,于是准备向A国的下部征战来获得更大的领土。 A国是一个M*N的矩阵,其中某些地方是城镇,某些地方是高山深涧无人居住。lanzerb把自己的部落分成若干支军队,他们约定: 1. 每支军队可以从任意一个城镇出发,并只能从上往向下征战,不能回头。途中只能经过城镇,不能经过高山深涧。 2. 如果某个城镇被某支军队到过,则其他军队不能再去那个城镇了。 3. 每支军队都可以在任意一个城镇停止征战。 4. 所有军队都很奇怪,他们走的方法有点像国际象棋中的马。不过马每次只能走1*2的路线,而他们只能走R*C的路线。 lanzerb的野心使得他的目标是统一全国,但是兵力的限制使得他们在配备人手时力不从心。假设他们每支军队都能顺利占领这支军队经过的所有城镇,请你帮lanzerb算算至少要多少支军队才能完成统一全国的大业。
输入
第一行包含4个整数M、N、R、C,意义见问题描述。接下来M行每行一个长度为N的字符串。如果某个字符是'.',表示这个地方是城镇;如果这个字符时'x',表示这个地方是高山深涧。
输出
输出一个整数,表示最少的军队个数。
样例输入
3 3 1 2
...
.x.
...
【样例输入二】
5 4 1 1
....
..x.
...x
....
x...
样例输出
4
【样例输出二】
5
【样例说明】
【数据范围】
100%的数据中,1<=M,N<=50,1<=R,C<=10。
提示
来源
//BZOJ没有,我来加个:国家集训队2011
吐槽
n和m都小于50,空间至少要开到50*50=2500!
解题思路
一道最小路径覆盖的题目,可以按照题意建图,对于点$(i,j)$,向$(i+r,j+c)$、$(i+r,j-c)$、$(i+c,j+r)$、$(i+c,j-r)$连单向边(前提是点在地图上且是城市),然后跑最小路径覆盖即可,我依然跑匈牙利,这提数据范围用不到dinic,但是dinic跑得快。
源代码
#include<cstdio>
#include<vector>
#include<cstring>
int m,n,r,c,ans=,N=;
char ch;
bool g[][]={};//(x-1)*n+y
bool vis[]={};
struct men{
int lover;
std::vector<int> t;
}man[]; int woman[]={}; bool dfs(int u)
{
int sz=man[u].t.size();
for(int i=;i<sz;i++)
{
int w=man[u].t[i];
if(!vis[w])
{
vis[w]=;
if(!woman[w]||dfs(woman[w]))
{
woman[w]=u;
man[u].lover=w;
return ;
}
}
}
return ;
}
int main()
{
//freopen("lanzerb.in","r",stdin);
//freopen("lanzerb.out","w",stdout);
scanf("%d %d %d %d",&m,&n,&r,&c);
for(int i=;i<=m;i++)
{
for(int j=;j<=n;j++)
{
scanf("\n%c",&ch);
if(ch=='.')
g[i][j]=,N++;
}
}
int bh[][]={{r,c},{c,-r},{c,r},{r,-c}};
for(int i=;i<=m;i++)
{
for(int j=;j<=n;j++)
{
if(!g[i][j]) continue;
int id=(i-)*n+j;
for(int k=;k<;k++)
{
if(r==c&&k>) break;
int x=i+bh[k][],y=j+bh[k][];
if(x>=&&x<=m&&y>=&&y<=n&&g[x][y])
{
man[id].t.push_back((x-)*n+y);
}
}
}
}
memset(woman,,sizeof(woman));
for(int i=;i<=n*m;i++)
{
memset(vis,,sizeof(vis));
if(dfs(i))
ans++;
}
printf("%d\n",N-ans);
return ;
}
BZOJ 2150 cogs 1861 [国家集训队2011]部落战争的更多相关文章
- cogs 1901. [国家集训队2011]数颜色
Cogs 1901. [国家集训队2011]数颜色 ★★★ 输入文件:nt2011_color.in 输出文件:nt2011_color.out 简单对比时间限制:0.6 s 内存限制 ...
- 【BZOJ 2120】【国家集训队 2011】【数颜色】(莫队)
题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2 ...
- AC日记——[国家集训队2011]旅游(宋方睿) cogs 1867
[国家集训队2011]旅游(宋方睿) 思路: 树链剖分,边权转点权: 线段树维护三个东西,sum,max,min: 当一个区间变成相反数时,sum=-sum,max=-min,min=-max: 来, ...
- happiness[国家集训队2011(吴确)]
[试题来源] 2011中国国家集训队命题答辩 [问题描述] 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科 ...
- COGS1882 [国家集训队2011]单选错位
★ 输入文件:nt2011_exp.in 输出文件:nt2011_exp.out 简单对比时间限制:1 s 内存限制:512 MB [试题来源] 2011中国国家集训队命题答辩 [问题 ...
- 1893. [国家集训队2011]等差子序列(bitset)
★★ 输入文件:nt2011_sequence.in 输出文件:nt2011_sequence.out 简单对比时间限制:0.3 s 内存限制:512 MB [试题来源] 2011中国 ...
- COGS.1901.[模板][国家集训队2011]数颜色(带修改莫队)
题目链接 COGS BZOJ2120 洛谷P1903 /* Add和Subd函数中的vis不能直接设为=1或=0 比如 l=1,r=0 -> l=3,r=5 时,[1,5]的vis标记全都是1 ...
- 【COGS 1873】 [国家集训队2011]happiness(吴确) 最小割
这是一种最小割模型,就是对称三角,中间双向边,我们必须满足其最小割就是满足题目条件的互斥关系的最小舍弃,在这道题里面我们S表示文T表示理,中间一排点是每个人,每个人向两边连其选文或者选理的价值,中间每 ...
- Bzoj 2134: [国家集训队2011]单选错位(期望)
2134: 单选错位 Time Limit: 10 Sec Memory Limit: 259 MB Description Input n很大,为了避免读入耗时太多,输入文件只有5个整数参数n, A ...
随机推荐
- oc63--协议@protocol1
// // SportProtocol.h // day17 #import <Foundation/Foundation.h> @protocol SportProtocol <N ...
- WebSocket在Asp.Net中的例子
环境 以下代码环境要求:win8或win10, .net4.5+IIS8 部署到IIS8上面 转到 Windows程序和功能 -打开Windows功能里面 IIS选项启动4.5 和WebSocket支 ...
- bzoj4034 [HAOI2015]树上操作——树链剖分
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4034 树剖裸题: 一定要注意 long long !!! update 的时候别忘了 pus ...
- 杂项-Java:EL表达式
ylbtech-杂项-Java:EL表达式 EL(Expression Language) 是为了使JSP写起来更加简单.表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提 ...
- python对XML 操作
一.XML的读取. 在 NewEdit 中有代码片段的功能,代码片段分为片段的分类和片段的内容.在缺省情况下都是用XML格式保存的.下面我讲述一下,如何使用minidom来读取和保存XML文件. 下面 ...
- leetcode二分查找相关
目录 33/81搜索旋转排序数组 34在排序数组中查找元素的第一个和最后一个位置 35搜索插入位置 74搜索二维矩阵 300最长上升子序列,354俄罗斯套娃信封问题 33/81搜索旋转排序数组 假设按 ...
- Win10重置 系统诸多设置或者菜单点击无效或者异常信息回复办法
cmd: 输入下列脚本重新注册DLL文件,待执行完毕后重启电脑 for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1
- F - Micro-World(简单模拟)
Problem description You have a Petri dish with bacteria and you are preparing to dive into the harsh ...
- fontSpider字蛛,好用的字体压缩工具教程
一直觉得很多字体特别好看,但是那些好看的字体只能做在图片上不能用CSS样式去实现,作为一个会设计的前端,真心觉得很烦恼,有时候那些文字需要更换,修改起来非常麻烦,要到处去找源文件,找不到源文件还要尽力 ...
- c#同步锁Monitor.Enter(T)
protected static object MObjLock = new object();//同步锁 public string GetData(int mId) { Monitor.Enter ...