bzoj2547
题解:
二分+宽搜+KM
显然答案不能太大
然后二分一下
代码:
#include<bits/stdc++.h>
const int N=,M=;
using namespace std;
const int dx[]={-,,,},dy[]={,,-,};
int m,n,cnt,pt,tot,c[N][N],d[N][N],x,y,t,path[N],bo[N],inq[N][N],mp[N][N];
struct node{int x,y;}a[N],b[N],h[N+];
void bfs(int sx,int sy,int p)
{
memset(d,0x3f,sizeof(d));
d[sx][sy]=;
int i,t,head=,tail=;
node u,v;
h[].x=sx;h[].y=sy;
memset(inq,,sizeof(inq));
while (head!=tail)
{
head=head%M+;u=h[head];inq[u.x][u.y]=;
for (int i=;i<;i++)
{
v.x=u.x+dx[i];v.y=u.y+dy[i];
if (v.x<=||v.x>m||v.y<=||v.y>n) continue;
if (p^(d[u.x][u.y]&))
if (c[v.x][v.y]<=c[u.x][u.y]) t=;else t=;
else
if (c[v.x][v.y]>=c[u.x][u.y]) t=;else t=;
if (d[u.x][u.y]+t<d[v.x][v.y])
{
d[v.x][v.y]=d[u.x][u.y]+t;
if (!inq[v.x][v.y]){inq[v.x][v.y]=;tail=tail%M+;h[tail]=v;}
}
}
}
}
int dfs(int x,int lim)
{
for (int i=;i<=tot;i++)
if (bo[i]&&mp[x][i]<=lim)
{
bo[i]=;
if (!path[i]||dfs(path[i],lim))
{
path[i]=x;
return ;
}
}
return ;
}
int pd(int x)
{
int tmp=;
memset(path,,sizeof(path));
for (int i=;i<=(cnt<<);i++)
{
memset(bo,,sizeof(bo));
tmp+=(dfs(i,x));
}
return tmp+x>=(cnt<<);
}
int main()
{
scanf("%d%d%d%d",&m,&n,&cnt,&pt);
for (int i=;i<=(cnt<<|);i++)scanf("%d%d",&a[i].x,&a[i].y);
for (int i=;i<=pt;i++)
{
scanf("%d%d%d",&x,&y,&t);
while (t--){b[++tot].x=x;b[tot].y=y;}
}
for (int i=;i<=m;i++)
for (int j=;j<=n;j++)scanf("%d",&c[i][j]);
for (int i=;i<=(cnt<<);i++)
{
if (i<=cnt) bfs(a[i].x,a[i].y,); else bfs(a[i].x,a[i].y,);
for (int j=;j<=tot;j++) mp[i][j]=d[b[j].x][b[j].y];
}
int l=,r=cnt<<;
while (l<r)
{
int mid=(l+r)>>;
if (pd(mid)) r=mid;
else l=mid+;
}
printf("%d\n",l);
return ;
}
bzoj2547的更多相关文章
- BZOJ2547 CTSC2002玩具兵(最短路径+二分答案+最大流)
先不考虑只有一个显得有些特殊的天兵. 可以发现超能力的作用实质上是使兵更换职业.每一个兵到达某个位置最少需要更换职业的次数是彼此独立的,因为如果需要某两人互换职业可以使他们各自以当前职业到达需要到的地 ...
- bzoj2547: [Ctsc2002]玩具兵
划了一天水,其实我还是有点愧疚的. 传送门 其实是水题,然而我真是太蠢了... 首先不考虑天兵,其他兵要到一个点去一定是通过它-另一种兵-它……这样多次交换的,并且交换对象是无所谓的,和它换的兵最终会 ...
- [bzoj2547]玩具兵<Spfa+二分+匈牙利算法>
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2547 挺有意思的一道题,这道题可以划分成几个小题....... 题目大意: 三个兵种在一个 ...
随机推荐
- iOS开发之XMPPFramework开发基础介绍
1 使用iPhoneXMPP实例 2 修改xmppstream设置 3 基础协议的介绍 协议 协议简介 XEP-0009 在两个XMPP实体间传输XML-RPC编码请求和响应 XEP-0006 使能与 ...
- 在python3下对数据分块(8x8大小)使用OpenCV的离散余弦变换DCT
在MATLAB中有blkproc (blockproc)对数据处理, 在python下没找到对应的Function, 这里利用numpy 的split(hsplit和vsplit) 对数据分块处理成8 ...
- jqgrid动态填充select
前两天使用jquery动态填充jqgrid的select,默认随便用一个dict填充(初始化页面是会替换掉),用着可以,后来发现当行数增多,回到以前行继续编辑发现select又变成了那个用来避免报错随 ...
- 自动配置@Resource与@Autowired
总结自:https://www.cnblogs.com/kuotian/p/8795812.html 试用情形:bean的某个成员变量是另一个bean 如果使用配置: <bean id=&quo ...
- 20145302张薇《Java程序设计》实验五报告
20145302张薇 实验五:Java网络编程及安全 实验内容 掌握Socket程序的编写: 掌握密码技术的使用: 设计安全传输系统. 实验要求 基于Java Socket实现安全传输 基于TCP实现 ...
- 20145307第七周JAVA学习报告
20145307<Java程序设计>第七周学习总结 教材学习内容总结 Lambda Lambda语法概述: Arrays的sort()方法可以用来排序,在使用sort()时,需要操作jav ...
- Java学习第四周学习笔记
20145307<Java程序设计>第4周学习总结 教材学习内容总结 继承与多态 继承 继承作为面向对象的第二大特征,基本上就是避免多个类间重复定义共同行为.即当多个类中存在相同属性和行为 ...
- 20145314郑凯杰 《Java程序设计》课程总结
20145314郑凯杰 <Java程序设计>课程总结 每周读书笔记链接汇总 ①寒假预习--"helloworld" ②第一周读书笔记 ③第二周读书笔记 ④第三周读书笔记 ...
- SaltStack部署服务及配置管理apache+php-第二篇
实验目标 1.使用SaltStack部署apache和php, 2.使用salt管理httpd.conf配置文件配置访问info.php使用账户密码 3.在salt里面增加对conf.d目录进行配置管 ...
- dp_train_f
Vasya And The Mushrooms 题目大意:有2n个格子,分成上下两行,每行n个,每个格子有蘑菇每秒的生长值(rate),小姑娘从左上角出发(time=0),每秒必须移动,而且只能移动到 ...