链接: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^​3​​logn)。

吐槽:在写这个题以前,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分治相关推荐

  1. 2016计蒜之道复赛 微信钱包付款

    2016计蒜之道复赛  微信钱包付款 一.题意: 微信钱包付款 给定n(0≤n≤10​10000),求a,,b,c使得a+b+c=n,并且f(a)=f(b)=f(c),f(n)定义为n的各数位的和,例 ...

  2. 2016 计蒜之道 复赛 菜鸟物流的运输网络【拆点+思维建图+网络流】

    菜鸟物流的运输网络 菜鸟物流有自己的运输网络,网络中包含 nn 个城市物流集散中心,和 mm 对城市之间的运输线路(线路是双向的).菜鸟物流允许淘宝卖家自行确定包裹的运输路径,但只有一条限制规则:不允 ...

  3. 2016 计蒜之道 初赛 第五场

    2016 计蒜之道 初赛 第五场 腾讯推出了一款新游戏:勇者的故事.在游戏里有一个勇者,要去挑战大魔王.大魔王有 nnn 支护卫队,第 iii 支护卫队里有 mim_im​i​​ 只恶魔.勇者和恶魔都 ...

  4. 2019年第五届计蒜之道复赛总结

    又是一年计蒜客,沙雕ACMer欢乐多 热心市民yzm10按捺不住冲动,在期末期间又打了一场比赛. 赛点:204(与罚时惊人的相似) 做完两题排在一百多名,以为稳了(其实后面做不动了)比到一半就开始挂机 ...

  5. leaflet调用高德地图和百度地图的实时路况瓦片图层

    1.leaflet调用高德地图实时路况 <html><head><meta charset="utf-8"><title>实时路况& ...

  6. 计蒜客 百度地图的实时路况

    Description Solution 设 \(solve(l,r)\) 为不经过 \([l,r]\) 之间的点的最短路 考虑 \(floyd\) 需要枚举一个 \(k\) 作为中转站,我们只需要保 ...

  7. [计蒜客]百度地图的实时路况

    description 给出有向图的点数\(n\)和邻接矩阵\(G\), 求\[P=∑_{1≤x,y,z≤n,x≠y,y≠z}d(x,y,z)\] 其中\(d(x,y,z)\)表示从\(x\)不经过\ ...

  8. 2018 计蒜之道 复赛

    A. 贝壳找房函数最值 常规贪心推式子.按(a-1)/b排序 #include <bits/stdc++.h> #define rep(i,a,b) for(int i=a;i<=b ...

  9. 2016 计蒜之道 初赛 第二场 联想公司的 logo 设计(计蒜客)

    题目: 输入输出说明: 输入输出样例: #include <stdio.h> #include <math.h> #define PI 3.1415926535898 int ...

  10. 2016 计蒜之道 初赛 第一场 青云的服务器密钥

    青云给每台服务器设置了一个由小写字母a-z组成的密钥.密钥的易破解程度定义如下: 对于密钥 S1..SnS_1..S_nS​1​​..S​n​​,我们需要首先计算其对应的π\piπ 数组.对于任意的 ...

最新文章

  1. 计算机硬盘冒烟了,电脑硬盘冒烟损坏了怎么办?
  2. 推荐一个Python GUI神器,双手彻底解放!
  3. linux在没有x远程桌面,xmanager远程桌面控制linux
  4. 促销海报设计的套路你知道么? 看这里!
  5. Docker结合Jenkins的持续构建实践
  6. 为什么搞农旅项目那么多人失败?
  7. java程序员必备基础知识
  8. 怎么才能获取NTFS for mac注册码呢?
  9. python分词、词频统计以及根据词频绘制词云
  10. phpQuery - PHP 处理 HTML DOM 的好帮手
  11. MATLAB中画柱状图
  12. 计算机如何解锁 磁盘,win7电脑磁盘被写保护如何解除,电脑磁盘被写保护解除方法...
  13. NSQ 源码分析之NSQD--lookup
  14. Zookeeper可以干什么
  15. 全球及中国有机橘子油行业投资前景预测与重点企业经营分析报告2021-2027年版
  16. Windows Live Writer插件开发经验
  17. Debian启动自定义桌面
  18. 读取U盘 PID,VID,SN等信息
  19. 【ERROR】java java.lang.NoClassDefFoundError 的解决办法(全)
  20. 如何面试软件测试工程师

热门文章

  1. 数据库信息查询(作者不是我)
  2. EMNLP'21 | 多语言和跨语言对话推荐
  3. 【KDD20】TAdaNet: 用于图增强元学习的任务自适应网络
  4. 用Siamese和Dual BERT来做多源文本分类
  5. 2019118_四个化学数据分析(4)
  6. 输入一个链表,输出该链表中倒数第k个结点
  7. 1.7 Linux文件目录查看与编写内容
  8. 机器学习实战系列(五):SVM支持向量机
  9. jupyter快捷键、markdown语法及markdown的算式语法
  10. 使用N4BiasFieldCorrection处理MRI图像