计蒜客 百度地图的实时路况 【cdq+floyd】
来源:互联网 发布:知网和知乎哪个好 编辑:程序博客网 时间:2024/04/27 21:33
链接:https://nanti.jisuanke.com/t/11217
分析:题目要求所有的dis(x,y,z); x到z不经过y的最短路。考虑暴力做法,枚举每一个点表示不经过它,跑n次floyd。。显然n^4过不去。
我们在求最短路的时候很多i到j的最短路重复的求过了。考虑分治,每次求(l,r)可以用(l,mid)求floyd表示用可能用到了(l,mid)中的点,到(mid+1,r)中找没有经过某点的最短路,直到l==r时就是可以找到所有不经过l的所有点对最短路了。
代码:
#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<string>#include<vector>#include<queue>#include<cmath>#include<stack>#include<set>#include<map>#define INF 0x3f3f3f3f3f3f3f3f#define Mn 305#define Mm 2000005#define mod 1000000007#define CLR(a,b) memset((a),(b),sizeof((a)))#define CLRS(a,b,Size) memset((a),(b),sizeof((a[0]))*(Size+1))#define CPY(a,b) memcpy ((a), (b), sizeof((a)))#pragma comment(linker, "/STACK:102400000,102400000")#define ul u<<1#define ur (u<<1)|1using namespace std;typedef long long ll;ll dis[Mn][Mn],now[10][Mn][Mn];ll ans=0;int n;void cdq(int l,int r,int deep) { if(l==r) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(i==l||j==l) continue; if(dis[i][j]==INF) ans-=1; else ans+=dis[i][j]; } } return ; } int mid=(l+r)>>1; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) now[deep][i][j]=dis[i][j]; for(int k=l;k<=mid;k++) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]); } } } cdq(mid+1,r,deep+1); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) dis[i][j]=now[deep][i][j]; for(int k=mid+1;k<=r;k++) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]); } } } cdq(l,mid,deep+1);}int main() { int x; scanf("%d",&n); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { scanf("%d",&x); if(x==-1) dis[i][j]=INF; else dis[i][j]=x; } } cdq(1,n,0); printf("%lld",ans); return 0;}
0 0
- 计蒜客 百度地图的实时路况 【cdq+floyd】
- 2016计蒜之道 复赛 A. 百度地图的实时路况(cdq分治+floyd)
- 计蒜客 百度地图的实时路况 (floyd+二分)
- 【Floyd+分治】计蒜客 百度地图的实时路况
- 计蒜客 百度地图的实时路况
- 计蒜客 百度地图的实时路况
- 计蒜客 百度地图的实时路况
- 计蒜之道复赛A题 百度地图的实时路况(分治+floyd)
- 2016 计蒜之道 复赛 百度地图的实时路况 [Floyd][分治]
- 计蒜之道 2016复赛A 百度地图的实时路况 [floyd+分治]【图论】
- 【分治+Floyd】2016计蒜之道复赛A[百度地图的实时路况]题解
- [分治 Floyd] 计蒜之道2016复赛 .百度地图的实时路况
- 百度地图-实时路况调用实现
- 算法:分治+floyd_计蒜之道复赛A题 百度地图的实时路况
- [分治 floyed] 2016 计蒜之道 复赛 百度地图的实时路况
- [分治+floyed] 2016 计蒜之道 复赛 A 百度地图的实时路况
- 百度地图引入实时路况功能时,IE8兼容性问题
- 地图网站显示实时交通路况信息的原理
- 开始整视频转为FLV的C#开发了
- hdu 1520(树形dp)
- javascript多线程执行
- Tesseract-OCR在MAC下的安装
- 贝叶斯分类器学习笔记
- 计蒜客 百度地图的实时路况 【cdq+floyd】
- NodeJS学习系列课程笔记(NodeJS 全局对象相关使用方法)
- Java:String和Date、Timestamp之间的转换 博客分类: 我的Java Javadatestringtimestamp 一、String与Date(java.util.Date)
- ava千百问_08JDK详解(014)_如何编写JVMTI agent程序
- ./configure && make && make install详解
- 以太网Ethernet移植(android4.3添加Ethernet框架支持)
- UWSGI学习笔记
- linux查看磁盘剩余空间和文件大小
- DTE参数和DTE run