2090. 「ZJOI2016」旅行者 分治,最短路

2090. 「ZJOI2016」旅行者

链接

loj

思路

\((l,mid)(mid+1,r)\).考虑跨过mid的贡献。

假设选的中间那条线的点为gzy,贡献为\(dis(x,gzy)+dis(gzy,y)\)

那就计算n遍最短路,一次分治为\(n^2mlog{nm}\)

设S=n*m.矩阵的长度是不定的,每次取最长的边进行分治是最好的,n最坏为\(\sqrt{n}\)

\(f(n)=2*f(\frac{n}{2})+S\sqrt{S}logS。所以总的复杂度就是\)\(S\sqrt{S}logS\)

都在同侧的也需要跨一跨
代码

#include <bits/stdc++.h>
#define FOR(i,a,b) for(int i=a;i<=b;++i)
using namespace std;
const int _=1e5+7,INF=0x3f3f3f3f;
int read() {int x=0,f=1;char s=getchar();for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';return x*f;
}
int n,m,q,ans[_],vis[_];
struct node {int x,y,X,Y,u,v,id;
}Q[_],tmp[_];
bool cmp(node a,node b) {return a.id<b.id;}
struct edge {int v,nxt,q;}e[_];
int head[_],tot;
void add(int u,int v,int q) {e[++tot].v=v;e[tot].q=q;e[tot].nxt=head[u];head[u]=tot;
}
int id(int x,int y) {return (x-1)*m+y;}
struct T_T {int u,val;T_T(int a=0,int b=0) {u=a,val=b;}bool operator < (const T_T &b) const {return val>b.val;}
};
int dis[_];
void dij(int S) {dis[S]=0;priority_queue<T_T> q;q.push(T_T(S,0));while(!q.empty()) {T_T u=q.top();q.pop();if(dis[u.u]!=u.val) continue;for(int i=head[u.u];i;i=e[i].nxt) {int v=e[i].v;if(vis[v]&&dis[v]>u.val+e[i].q) {dis[v]=u.val+e[i].q;q.push(T_T(v,dis[v]));}}}
}
void solve(int x,int y,int X,int Y,int l,int r) {if(l>r) return;if(x==X&&y==Y) {for(int i=l;i<=r;++i) ans[Q[i].id]=0;return;}if(Y-y>X-x) {int mid=(Y+y)>>1;FOR(i,x,X) {FOR(j,x,X) FOR(k,y,Y) dis[id(j,k)]=INF;dij(id(i,mid));FOR(j,l,r)ans[Q[j].id]=min(dis[Q[j].u]+dis[Q[j].v],ans[Q[j].id]);}FOR(i,x,X) vis[id(i,mid)]=0;int p=l,q=r;FOR(i,l,r) {if(max(Q[i].y,Q[i].Y)<=mid) tmp[p++]=Q[i];if(min(Q[i].y,Q[i].Y)>mid) tmp[q--]=Q[i];}FOR(i,l,r) Q[i]=tmp[i];solve(x,y,X,mid,l,p-1);solve(x,mid+1,X,Y,q+1,r);} else {int mid=(X+x)>>1;FOR(i,y,Y) {FOR(j,x,X) FOR(k,y,Y) dis[id(j,k)]=INF;dij(id(mid,i));FOR(j,l,r)ans[Q[j].id]=min(dis[Q[j].u]+dis[Q[j].v],ans[Q[j].id]);}FOR(i,y,Y) vis[id(mid,i)]=0;int p=l,q=r;FOR(i,l,r) {if(max(Q[i].x,Q[i].X)<=mid) tmp[p++]=Q[i];if(min(Q[i].x,Q[i].X)>mid) tmp[q--]=Q[i];}FOR(i,l,r) Q[i]=tmp[i];solve(x,y,mid,Y,l,p-1);solve(mid+1,y,X,Y,q+1,r);}
}
int main() {n=read(),m=read();FOR(i,1,n) FOR(j,1,m-1) {int val=read();add(id(i,j),id(i,j+1),val);add(id(i,j+1),id(i,j),val);}FOR(i,1,n-1) FOR(j,1,m) {int val=read();add(id(i,j),id(i+1,j),val);add(id(i+1,j),id(i,j),val);}FOR(i,1,n) FOR(j,1,m) vis[id(i,j)]=1;q=read();FOR(i,1,q) {Q[i].x=read(),Q[i].y=read(),Q[i].u=id(Q[i].x,Q[i].y);Q[i].X=read(),Q[i].Y=read(),Q[i].v=id(Q[i].X,Q[i].Y);Q[i].id=i,ans[i]=INF;}solve(1,1,n,m,1,q);FOR(i,1,q) printf("%d\n",ans[i]);return 0;
}

转载于:https://www.cnblogs.com/dsrdsr/p/11379880.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363114.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Xshell连接Linux慢问题解决办法

由于各种原因&#xff0c;经常更换网络环境&#xff0c;然后发现&#xff0c;每次更换网络环境后&#xff0c;xshell连接虚拟机的rhel或者CentOS都几乎是龟速.... 今天专门查了一下解决方案&#xff1a; 原来是ssh的服务端在连接时会自动检测dns环境是否一致导致的&#xff0c;…

Gradle入门:依赖管理

即使不是没有可能&#xff0c;创建没有任何外部依赖关系的现实应用程序也是一项挑战。 这就是为什么依赖性管理是每个软件项目中至关重要的部分的原因。 这篇博客文章描述了我们如何使用Gradle管理项目的依赖关系。 我们将学习配置已使用的存储库和所需的依赖项。 我们还将通过…

牛客NOIP暑期七天营-提高组1

牛客NOIP暑期七天营-提高组1 链接 A 边权可为0就排序建一条链子。 但是边权不为0 除了第一个有0的不行。 x连向上一个比他小的数。 期间判断有无解。 #include <bits/stdc.h> #define ll long long using namespace std; const int _2e57; int read() {int x0,f1;char sg…

BZOJ.4009.[HNOI2015]接水果(整体二分 扫描线)

LOJBZOJ洛谷 又是一个三OJ rank1&#xff01;w \(Description\) &#xff08;还是感觉&#xff0c;为啥非要出那种题目背景啊-直接说不好么&#xff09; 给定一棵树和一个路径集合&#xff08;每条路径有一个权值&#xff09;。\(Q\)次询问&#xff0c;每次询问给定一条路径&am…

HTML5常用标签及特殊字符表

*http://html5doctor.com/nav*http://html5doctor.com/article*http://html5doctor.com/section*http://html5doctor.com/asidehttp://html5doctor.com/divhttp://html5doctor.com/figurehttp://html5doctor.com/outlinehttp://html5doctor.com/semantics p 和 span 的理解 p标…

【转载】使用Imaging组件加载GIF动画

Mobil手机加载GIF动态图像的方法有两种&#xff0c;一个就是使用GIF89a标准算法&#xff0c;另一个就是使用SDK自带的Imaging组件&#xff0c;这两种方法是很典型的手机图像处理技术的实践。使用Imaging组件加载GIF比使用标准算法处理高效的多&#xff0c;特别是在处理真彩GIF动…

在Java中获取素数的无限列表

一个常见的问题是确定数字的素因式分解。 蛮力方法是审判部门&#xff08; 维基百科 &#xff0c; 可汗学院 &#xff09;&#xff0c;但是如果必须考虑多个数字&#xff0c;这需要大量的浪费工作。 一种广泛使用的解决方案是Eratosthenes筛&#xff08; 维基百科 &#xff0c…

CF888G XOR-MST trie,贪心

CF888G XOR-MST 链接 CF888G 思路 trie上贪心&#xff0c;先左右两边连边&#xff0c;再用一条边的代价连起左右两颗树。因为内部的边一定比跨两棵树的边权笑&#xff0c;显然是对的。 代码自己瞎yy的。启发式合并 代码 #include <bits/stdc.h> #define ll long long usi…

【处理手记】Configuration system failed to initialize异常的另类原因

有个c#程序在某台电脑上&#xff0c;执行某个操作时&#xff0c;总是会报如图错误&#xff1a; 度娘一番&#xff0c;发现市面上常见的原因是配置文件中的特定节点的位置不对&#xff0c;或者配置文件损坏等等&#xff0c;而这个程序根本没有使用内置的配置文件方案&#xff0c…

学习《Building Applications with FME Objects》 之四 从数据集读取要素

FMEOReader可以访问任何支持格式的数据。 FMEOReader返回两类要素&#xff1a;schema&#xff08;模式&#xff09;要素和数据要素&#xff0c;模式要素用于描述数据集模型。每种支持的格式都有一个模式&#xff0c;一个模式要素是一类要素的数据模型&#xff0c;模式要素描述属…

使用Zapier将应用程序与Neo4j集成

最近&#xff0c;我被带往Zapier &#xff0c;以便在系统之间完成一些轻量级的集成&#xff0c;以快速地进行概念验证。 最初是持怀疑态度的&#xff0c;我发现它确实可以节省时间&#xff0c;并将您从未集成过的系统所有部分捆绑在一起。 而且&#xff0c;这是人们集成他们使…

手机闪屏

表示&#xff0c;本人买了一个华为手机&#xff0c;采用三四个月&#xff0c;就开始闪屏了&#xff0c;手机一划屏就闪&#xff0c;开始的时候表示不能理解&#xff0c;不是手机一般是1年才换吗&#xff1f;突然遇到我也是纠结。 于是乎&#xff0c;浏览了些百度上面的解决方式…

工程能力之C4模型

概述 刚在InfoQ上看到一篇介绍C4Model的文章,觉得这个模型设计的很赞,很有指导意义,做个简单的记录. Why,为什么需要架构图? ThoughtWorks中国 文章中有几句话我觉得很有道理,这里直接摘抄. “纸上的不是架构&#xff0c;每个人脑子里的才是” ; “那些精妙的方案之所以落不了…

[silverlight基础]仿文字连接跑马灯效果-高手绕道

运行效果如下:分析示意图&#xff1a;代码:1<Canvas x:Name"a"Background"AliceBlue"MouseEnter"a_MouseEnter"MouseLeave"a_MouseLeave"Cursor"Hand">2<Canvas.Clip>3<RectangleGeometry RadiusX"0&qu…

Hibernate脏检查的剖析

介绍 持久性上下文使实体状态转换进入队列&#xff0c;该实体状态转换在刷新后转换为数据库语句。 对于托管实体&#xff0c;Hibernate可以代表我们自动检测传入的更改并安排SQL UPDATE。 这种机制称为自动脏检查 。 默认的脏检查策略 默认情况下&#xff0c;Hibernate检查所有…

http GET 和 POST 请求的优缺点、区别以及误区

原文章&#xff1a;https://blog.csdn.net/qq_28483283/article/details/80207674 请优先参考原文章 Get和Post在面试中一般都会问到&#xff0c;一般的区别&#xff1a; &#xff08;1&#xff09;post更安全&#xff08;不会作为url的一部分&#xff0c;不会被缓存、保存在服…

软件工程第二次作业-VSTS单元测试

一、选择开发工具 开发工具选择 Visual studio 2017 社区版&#xff0c;开发语言为C 由于之前已经安装完毕&#xff0c;所以不上传安装过程&#xff0c;主界面如下&#xff1a; 二、练习自动单元测试 使用的测试工具是VSTS&#xff0c;具体步骤如下&#xff1a; 1.编写一个判断…

随便写写(8)

凌晨两点了&#xff0c;还在捣鼓虚拟机&#xff0c;教师节老师们吃不上饭&#xff0c;罪过可就大了。远程有点慢&#xff0c;还遇到个小问题&#xff0c;.netfx 3.5几次都没装上&#xff0c;看了下日志&#xff0c;好像是ghost里的.netfx 2.0有问题&#xff0c;想卸载之&#x…

React后台管理系统-登录页面

登录页面 <div className"col-md-4 col-md-offset-4"> <div className"panel panel-default login-panel"> <div className"panel-heading">欢迎登录 - MMALL管理系统</div> <div className"panel-body"&g…

识别JVM –比预期的要复杂

在Plumbr&#xff0c;我们花了最后一个月的时间来为将来的重大改进奠定基础。 此类构件之一是为JVM添加唯一标识符&#xff0c;以便将来自同一JVM的所有会话链接在一起。 虽然一开始看起来似乎很琐碎的任务&#xff0c;但是当查看JVM捆绑的jps命令的输出时&#xff0c;围绕该问…