2016计蒜之道复赛 百度地图的实时路况 floyd+cdq分治
链接:https://nanti.jisuanke.com/t/11217
奉上官方题解:
枚举 d(x , y , z) 中的 y,把 y 从这个图中删去,再求这时的全源最短路即可,使用 Floyd 算法来做上述过程。
Floyd 算法可以是一个增量的过程,虽然第一维一般都是从 1枚举到 k但是这个枚举的顺序并不影响最后的结果。
所以如果可以预处理出对于每个点 y,只剩 y 没有在 Floyd 的第一维枚举到的矩阵,这个矩阵的值就是不经过 y 点的全源最短路。
所以使用分治,每一次把点集拆成两半,先用前一半的点在 Floyd 算法中滚,再递归后一半点。
然后回溯,用后一半的点在 Floyd 算法里滚,递归前一半的点。这样每个只有一个点的状态得到的就是只有这个点没有在 Floyd 算法里滚的矩阵。
时间复杂度为 O(n^3logn)。
吐槽:在写这个题以前,cdq分治只写过三维偏序模板题,整体二分的题写的很少,以后要应该多写一些
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <string> #include <stack> #include <vector> #include <map> #include <queue> #include <algorithm> #include <utility> using namespace std; typedef long long LL; const int N=305; const int INF=0x3f3f3f3f; int dp[25][N][N],n,mp[N][N]; LL ret; void cpydp(int dep){for(int i=1;i<=n;++i)for(int j=1;j<=n;++j)dp[dep][i][j]=dp[dep-1][i][j]; } void update(int dep,int l,int r){for(int k=l;k<=r;++k)for(int i=1;i<=n;++i)for(int j=1;j<=n;++j)if(dp[dep][i][j]>dp[dep][i][k]+dp[dep][k][j])dp[dep][i][j]=dp[dep][i][k]+dp[dep][k][j]; } void cdq(int dep,int l,int r){if(l==r){for(int i=1;i<=n;++i)for(int j=1;j<=n;++j){if(i==l||j==l)continue;if(dp[dep][i][j]==INF)dp[dep][i][j]=-1;ret+=1ll*dp[dep][i][j];}return;}int m=l+r>>1;cpydp(dep+1),update(dep+1,m+1,r);cdq(dep+1,l,m);cpydp(dep+1),update(dep+1,l,m);cdq(dep+1,m+1,r); } int main() {scanf("%d",&n);for(int i=1;i<=n;++i)for(int j=1;j<=n;++j){scanf("%d",&dp[0][i][j]);if(dp[0][i][j]==-1)dp[0][i][j]=INF;} cdq(0,1,n);cout<<ret<<endl;return 0; }
View Code
转载于:https://www.cnblogs.com/shuguangzw/p/5643071.html
2016计蒜之道复赛 百度地图的实时路况 floyd+cdq分治相关推荐
- 2016计蒜之道复赛 微信钱包付款
2016计蒜之道复赛 微信钱包付款 一.题意: 微信钱包付款 给定n(0≤n≤1010000),求a,,b,c使得a+b+c=n,并且f(a)=f(b)=f(c),f(n)定义为n的各数位的和,例 ...
- 2016 计蒜之道 复赛 菜鸟物流的运输网络【拆点+思维建图+网络流】
菜鸟物流的运输网络 菜鸟物流有自己的运输网络,网络中包含 nn 个城市物流集散中心,和 mm 对城市之间的运输线路(线路是双向的).菜鸟物流允许淘宝卖家自行确定包裹的运输路径,但只有一条限制规则:不允 ...
- 2016 计蒜之道 初赛 第五场
2016 计蒜之道 初赛 第五场 腾讯推出了一款新游戏:勇者的故事.在游戏里有一个勇者,要去挑战大魔王.大魔王有 nnn 支护卫队,第 iii 支护卫队里有 mim_imi 只恶魔.勇者和恶魔都 ...
- 2019年第五届计蒜之道复赛总结
又是一年计蒜客,沙雕ACMer欢乐多 热心市民yzm10按捺不住冲动,在期末期间又打了一场比赛. 赛点:204(与罚时惊人的相似) 做完两题排在一百多名,以为稳了(其实后面做不动了)比到一半就开始挂机 ...
- leaflet调用高德地图和百度地图的实时路况瓦片图层
1.leaflet调用高德地图实时路况 <html><head><meta charset="utf-8"><title>实时路况& ...
- 计蒜客 百度地图的实时路况
Description Solution 设 \(solve(l,r)\) 为不经过 \([l,r]\) 之间的点的最短路 考虑 \(floyd\) 需要枚举一个 \(k\) 作为中转站,我们只需要保 ...
- [计蒜客]百度地图的实时路况
description 给出有向图的点数\(n\)和邻接矩阵\(G\), 求\[P=∑_{1≤x,y,z≤n,x≠y,y≠z}d(x,y,z)\] 其中\(d(x,y,z)\)表示从\(x\)不经过\ ...
- 2018 计蒜之道 复赛
A. 贝壳找房函数最值 常规贪心推式子.按(a-1)/b排序 #include <bits/stdc++.h> #define rep(i,a,b) for(int i=a;i<=b ...
- 2016 计蒜之道 初赛 第二场 联想公司的 logo 设计(计蒜客)
题目: 输入输出说明: 输入输出样例: #include <stdio.h> #include <math.h> #define PI 3.1415926535898 int ...
- 2016 计蒜之道 初赛 第一场 青云的服务器密钥
青云给每台服务器设置了一个由小写字母a-z组成的密钥.密钥的易破解程度定义如下: 对于密钥 S1..SnS_1..S_nS1..Sn,我们需要首先计算其对应的π\piπ 数组.对于任意的 ...
最新文章
- 计算机硬盘冒烟了,电脑硬盘冒烟损坏了怎么办?
- 推荐一个Python GUI神器,双手彻底解放!
- linux在没有x远程桌面,xmanager远程桌面控制linux
- 促销海报设计的套路你知道么? 看这里!
- Docker结合Jenkins的持续构建实践
- 为什么搞农旅项目那么多人失败?
- java程序员必备基础知识
- 怎么才能获取NTFS for mac注册码呢?
- python分词、词频统计以及根据词频绘制词云
- phpQuery - PHP 处理 HTML DOM 的好帮手
- MATLAB中画柱状图
- 计算机如何解锁 磁盘,win7电脑磁盘被写保护如何解除,电脑磁盘被写保护解除方法...
- NSQ 源码分析之NSQD--lookup
- Zookeeper可以干什么
- 全球及中国有机橘子油行业投资前景预测与重点企业经营分析报告2021-2027年版
- Windows Live Writer插件开发经验
- Debian启动自定义桌面
- 读取U盘 PID,VID,SN等信息
- 【ERROR】java java.lang.NoClassDefFoundError 的解决办法(全)
- 如何面试软件测试工程师