百度地图的实时路况功能相当强大,能方便出行的人们避开拥堵路段。一个地区的交通便捷程度就决定了该地区的拥堵情况。假设一个地区有 nnn 个观测点,编号从 111 到 nnn。定义 d(u,v,w)d(u,v,w)d(u,v,w) 为从 uuu 号点出发,严格不经过 vvv 号点,最终到达 www 号点的最短路径长度,如果不存在这样的路径,d(u,v,w)d(u,v,w)d(u,v,w) 的值为 −1-1−1。

那么这个地区的交通便捷程度 PPP 为:

P=∑1≤x,y,z≤n,x≠y,y≠zd(x,y,z)P = \sum_{1 \leq x,y,z \leq n , x \neq y , y \neq z}{d(x,y,z)}P=∑​1≤x,y,z≤n,x≠y,y≠z​​d(x,y,z)

现在我们知道了该地区的 nnn 个点,以及若干条有向边,求该地区的交通便捷程度 PPP。

输入格式

第一行输入一个正整数 n(4≤n≤300)n(4 \leq n \leq 300)n(4≤n≤300),表示该地区的点数。

接下来输入 nnn 行,每行输入 nnn 个整数。第 iii 行第 jjj 个数 Gi,j(−1≤Gi,j≤10000;Gi,i=0)G_{i,j}(-1 \leq G_{i,j} \leq 10000;G_{i,i} = 0)G​i,j​​(−1≤G​i,j​​≤10000;G​i,i​​=0) 表示从 iii 号点到 jjj 号的有向路径长度。如果这个数为 −1-1−1,则表示不存在从 iii 号点出发到 jjj 号点的路径。

输出格式

输出一个整数,表示这个地区的交通便捷程度。

样例输入

4
0 1 -1 -1
-1 0 1 -1
-1 -1 0 1
1 -1 -1 0

样例输出

4

【题解】
“Floyd 算法又叫 “插点法”
注意到插点的顺序是无关紧要的
我们可以分治:
令 solve(l, r) 表示处理区间 [l, r] 的询问
取 mid = (l + r) / 2
把 [l, mid] 的点插入,递归 solve(mid + 1, r);
把 [mid + 1, r] 的点插入,递归 solve(l, mid);
递归到叶子的时候,回答询问
复杂度 O(N^3\log N),只需注意到每个点会被插 O(\log N) 次”
—— 吕欣
 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <vector>
#define max(a, b) ((a) > (b) ? (a) : (b))
#define min(a, b) ((a) < (b) ? (a) : (b)) inline void read(int &x)
{
x = ;char ch = getchar(), c = ch;
while(ch < '' || ch > '')c = ch, ch = getchar();
while(ch <= '' && ch >= '')x = x * + ch - '', ch = getchar();
if(c == '-')x = -x;
} const int INF = 0x3f3f3f3f;
const int MAXN = + ; int g[MAXN][MAXN],n;
long long ans; void solve(int l, int r)
{
if(l == r)
{
for(register int i = ;i <= n;++ i)
{
if(l == i) continue;
for(register int j = ;j <= n;++ j)
{
if(r == j) continue;
if(g[i][j] != INF)
ans += g[i][j];
else
-- ans;
}
}
return;
}
int tmp[MAXN][MAXN];
for(register int i = ;i <= n;++ i)
for(register int j = ;j <= n;++ j)
tmp[i][j] = g[i][j];
int mid = (l + r) >> ;
for(register int k = l;k <= mid;++ k)
for(register int i = ;i <= n;++ i)
for(register int j = ;j <= n;++ j)
if(g[i][j] > g[i][k] + g[k][j])
g[i][j] = g[i][k] + g[k][j];
solve(mid + , r);
for(register int i = ;i <= n;++ i)
for(register int j = ;j <= n;++ j)
g[i][j] = tmp[i][j];
for(register int k = mid + ;k <= r;++ k)
for(register int i = ;i <= n;++ i)
for(register int j = ;j <= n;++ j)
if(g[i][j] > g[i][k] + g[k][j])
g[i][j] = g[i][k] + g[k][j];
solve(l, mid);
return;
} int main()
{
read(n);
for(register int i = ;i <= n;++ i)
for(register int j = ;j <= n;++ j)
{
read(g[i][j]);
if(g[i][j] == -)g[i][j] = INF;
}
solve(, n);
printf("%lld", ans);
return ;
}

Code


 

2016计蒜之道复赛A 百度地图的实时路况的更多相关文章

  1. 2016计蒜之道复赛 百度地图的实时路况 floyd+cdq分治

    链接:https://nanti.jisuanke.com/t/11217 奉上官方题解: 枚举 d(x , y , z) 中的 y,把 y 从这个图中删去,再求这时的全源最短路即可,使用 Floyd ...

  2. 2016计蒜之道复赛 百度地图的实时路况(Floyd 分治)

    题意 题目链接 Sol 首先一个结论:floyd算法的正确性与最外层\(k\)的顺序无关(只要保证是排列即可) 我大概想到一种证明方式就是把最短路树上的链拿出来,不论怎样枚举都会合并其中的两段,所以正 ...

  3. 2016计蒜之道复赛 百度地图的实时路况 分治+Floyd

    题目链接:https://nanti.jisuanke.com/t/A1108 这道题还挺有意思的.让我对Floyd的了解又加深了一点. 首先我们重新审视Floyd这三重循环到底有什么用?第一层是枚举 ...

  4. 2016计蒜之道复赛 菜鸟物流的运输网络 网络流EK

    题源:https://nanti.jisuanke.com/t/11215 分析:这题是一个比较经典的网络流模型.把中间节点当做源,两端节点当做汇,对节点进行拆点,做一个流量为 22 的流即可. 吐槽 ...

  5. 2016计蒜之道复赛B题:联想专卖店促销

    题解 思路: 二分答案,设我们要check的值为x. 注意到每一个礼包都有,一个U盘,一个鼠标. 剩余的,分别为一个机械键盘,一个U盘,一个鼠标. 当礼包数目为x时,我们至多可以提供a-x个普通,b- ...

  6. 2018 计蒜之道复赛 贝壳找房魔法师顾问(并查集+dfs判环)

    贝壳找房在遥远的传奇境外,找到了一个强大的魔法师顾问.他有 22 串数量相同的法力水晶,每个法力水晶可能有不同的颜色.为了方便起见,可以将每串法力水晶视为一个长度不大于 10^5105,字符集不大于  ...

  7. 2016计蒜之道初赛第四场A

    在每年的淘宝“双十一”时,访问量都会暴涨,服务器的请求会被流量分配程序按照一定策略,分发给不同的进程去处理.有一类请求,有两个进程可以接受分发的请求,其中一个进程所在服务器的配置.网络传输性能等都要优 ...

  8. 2016 计蒜之道 初赛 第一场 D 青云的机房组网方案 (虚树)

    大意: 给定树, 点$i$的点权为$a_i$, 求$\sum\limits_{a_i \perp a_j}dis(i,j)$ 中等难度可以枚举每条边的贡献, 维护子树内每个数出现次数$a$, 转化为求 ...

  9. 2019 计蒜之道 复赛 E. 撑起信息安全“保护伞” (贪心,构造,规律)

    为了给全球小学员打起信息安全"保护伞",VIPKID 还建立了一套立体化的安全防御体系,7 \times 247×24 小时持续安全监控与应急响应等多项联动,具备业界最高级别的数据 ...

随机推荐

  1. CobaltStrike与Metasploit实战联动

    前言 CobalStrike 与 Metasploit 均是渗透利器,各有所长.前者更适合做稳控平台,后者则更擅长内网各类探测搜集与漏洞利用.两者更需要灵活的联动,各自相互依托,从而提升渗透的效率. ...

  2. opencv-阈值分割

    关于自适应阈值,可参考:Wellner 自适应阈值二值化算法 一.大津法OTSU(最大类间方差法) 参考:非黑即白——图像分割入门篇之Otsu阈值 自适应阈值分割—大津法(OTSU算法)C++实现 灰 ...

  3. 84 落单的数 III

    原题网址:http://www.lintcode.com/zh-cn/problem/single-number-iii/# 给出2*n + 2个的数字,除其中两个数字之外其他每个数字均出现两次,找到 ...

  4. System.Web.Mvc.ViewEngineResult.cs

    ylbtech-System.Web.Mvc.ViewEngineResult.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral, P ...

  5. Js中的onblur和onfocus事件应用介绍

    html页面中,诸如按钮.文本框等可视元素都具有拥有和失去焦点的事件,本文以文本框获得和失去焦点为例简单讲解onfocus和onblur的应用 html页面中,诸如按钮.文本框等可视元素都具有拥有和失 ...

  6. iOS开发CGImage.h简介

    1.前因 由于剪切图片用到下面方法,此方法属于CGImage.h中,通过创建CGImageRef像素位图,可以通过操作存储的像素位来编辑图片. /* Create an image using the ...

  7. 05_springmvc参数绑定

    一.参数绑定的过程 从客户端请求key/value数据,经过参数绑定,将key/value数据绑定到controller方法的形参上.springmvc中,接收页面提交的数据是通过方法形参来接收.而不 ...

  8. python 第三方库的安装方法

    一.看更大的python世界 python 全球计算生态的主站:python 社区 www.pypi.org 二.安装第三方库 1) pip 命令安装方法 1.1 安装第三方库 命令行输入pip in ...

  9. Access数据库连接字符串

    <connectionStrings> <add name="connStr" connectionString="server=.;uid=home; ...

  10. linux与window文件传输(使用ssh+putty)

    linux与window文件传输(使用ssh+putty) https://blog.csdn.net/Imagine_Dragon/article/details/78303241