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 挺有意思的一道题,这道题可以划分成几个小题....... 题目大意: 三个兵种在一个 ...
随机推荐
- 20145216史婧瑶《Java程序设计》第3周学习总结
20145216 <Java程序设计>第3周学习总结 教材学习内容总结 第四章 认识对象 4.1 类与对象 •对象(Object):存在的具体实体,具有明确的状态和行为 •类(Class) ...
- Jquery11 动画效果
学习要点: 1.显示.隐藏 2.滑动.卷动 3.淡入.淡出 4.自定义动画 5.列队动画方法 6.动画相关方法 7.动画全局属性 在以前很长一段时间里,网页上的各种特效还需要采用 flash 在进行. ...
- 重新想,重新看——CSS3变形,过渡与动画①
学习CSS3,觉得最难记忆的部分除了flex特性之外,就要属变形,过渡和动画部分了.作为初学者,总有种犯懒的心理,想着既然IE8浏览器都不完全支持CSS动画属性,还要考虑浏览器兼容问题,那么就不那么着 ...
- MySQL_ERROR 1231 (42000) at line XX in file 'file_name' Variable 'time_zone' can't be
类似的错误信息如下 ERROR 1231 (42000) at line 10370 in file: '/root/sql/ultrax_170322.dmp': Variable 'time_zo ...
- dubbo-admin与多注册中心(注册中心集群)
在使用dubbo时,注册中心是一个必要的架构组成成员.当我们的注册中心没有采取集群时,如何在dubbo-admin中配置,我们可以根据dubbo官方文档,很快找到我们的答案. 但是当注册中心集群之后怎 ...
- ASP.NET OAuth Authorization - Difference between using ClientId and Secret and Username and Password
What I don't fully understand is the use of ClientId and Secret vs Username and Password. The code ...
- kafka log文件和offset原理
log与offset 日志存储路径根据配置log.dirs ,日志文件通过 topic-partitionId分目录,再通过log.roll.hours 和log.segment.bytes来分文件, ...
- UVA 814 The Letter Carrier's Rounds(JAVA基础map)
题解:就是按照题目模拟就好 但是这个题目让我发现了我Java里面许多问题 具体看代码,但是还是分为这几个方面 属性的作用域问题,缓冲区问题,map与list映射的问题,输出多个空格不一定是/t,反转思 ...
- detectron——test 错误集锦
一.测试错误,运行如下代码 python2 tools/test_net.py --cfg experiments/e2e_faster_rcnn_resnet--FPN_pascal2007.yam ...
- 源码安装git
1.安装依赖包 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel 2.下载git源码并解压缩 wget ...