2016计蒜之道复赛A 百度地图的实时路况
百度地图的实时路况功能相当强大,能方便出行的人们避开拥堵路段。一个地区的交通便捷程度就决定了该地区的拥堵情况。假设一个地区有 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≠zd(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)Gi,j(−1≤Gi,j≤10000;Gi,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 百度地图的实时路况的更多相关文章
- 2016计蒜之道复赛 百度地图的实时路况 floyd+cdq分治
链接:https://nanti.jisuanke.com/t/11217 奉上官方题解: 枚举 d(x , y , z) 中的 y,把 y 从这个图中删去,再求这时的全源最短路即可,使用 Floyd ...
- 2016计蒜之道复赛 百度地图的实时路况(Floyd 分治)
题意 题目链接 Sol 首先一个结论:floyd算法的正确性与最外层\(k\)的顺序无关(只要保证是排列即可) 我大概想到一种证明方式就是把最短路树上的链拿出来,不论怎样枚举都会合并其中的两段,所以正 ...
- 2016计蒜之道复赛 百度地图的实时路况 分治+Floyd
题目链接:https://nanti.jisuanke.com/t/A1108 这道题还挺有意思的.让我对Floyd的了解又加深了一点. 首先我们重新审视Floyd这三重循环到底有什么用?第一层是枚举 ...
- 2016计蒜之道复赛 菜鸟物流的运输网络 网络流EK
题源:https://nanti.jisuanke.com/t/11215 分析:这题是一个比较经典的网络流模型.把中间节点当做源,两端节点当做汇,对节点进行拆点,做一个流量为 22 的流即可. 吐槽 ...
- 2016计蒜之道复赛B题:联想专卖店促销
题解 思路: 二分答案,设我们要check的值为x. 注意到每一个礼包都有,一个U盘,一个鼠标. 剩余的,分别为一个机械键盘,一个U盘,一个鼠标. 当礼包数目为x时,我们至多可以提供a-x个普通,b- ...
- 2018 计蒜之道复赛 贝壳找房魔法师顾问(并查集+dfs判环)
贝壳找房在遥远的传奇境外,找到了一个强大的魔法师顾问.他有 22 串数量相同的法力水晶,每个法力水晶可能有不同的颜色.为了方便起见,可以将每串法力水晶视为一个长度不大于 10^5105,字符集不大于 ...
- 2016计蒜之道初赛第四场A
在每年的淘宝“双十一”时,访问量都会暴涨,服务器的请求会被流量分配程序按照一定策略,分发给不同的进程去处理.有一类请求,有两个进程可以接受分发的请求,其中一个进程所在服务器的配置.网络传输性能等都要优 ...
- 2016 计蒜之道 初赛 第一场 D 青云的机房组网方案 (虚树)
大意: 给定树, 点$i$的点权为$a_i$, 求$\sum\limits_{a_i \perp a_j}dis(i,j)$ 中等难度可以枚举每条边的贡献, 维护子树内每个数出现次数$a$, 转化为求 ...
- 2019 计蒜之道 复赛 E. 撑起信息安全“保护伞” (贪心,构造,规律)
为了给全球小学员打起信息安全"保护伞",VIPKID 还建立了一套立体化的安全防御体系,7 \times 247×24 小时持续安全监控与应急响应等多项联动,具备业界最高级别的数据 ...
随机推荐
- 大文件传输 分片上传 上传id 分片号 授权给第三方上传
https://www.zhihu.com/question/39593108 作者:ZeroOne链接:https://www.zhihu.com/question/39593108/answer/ ...
- 杂项-公司:Facebook
ylbtech-杂项-公司:Facebook Facebook(脸书)是美国的一个社交网络服务网站 ,创立于2004年2月4日,总部位于美国加利福尼亚州帕拉阿图,2012年3月6日发布Windows版 ...
- XJOI夏令营501训练1——分配工作
传送门:QAQQAQ 题意:某公司有工作人员x1,x2,…,xn ,他们去做工作y1,y2,…,ym(n<=m) ,每个人都能做其中的几项工作,并且对每一项工作都有一个固定的效率.问能否找到一种 ...
- 《DSP using MATLAB》Problem 8.26
代码: %% ------------------------------------------------------------------------ %% Output Info about ...
- python 之 heapq (堆)
堆的实现通过构造二叉堆,实为二叉树的一种:这种数据结构具有以下性质: 任意节点小于(或大于)它的后裔,最小元(或最大元)在堆的根上 堆总是一颗完整树.即除了最低层,其它层的节点都被元素填满,且最低层极 ...
- ES6之主要知识点(四)数值
引自:http://es6.ruanyifeng.com/#docs/number 1.Number.isFinite(),Number.isNaN() Number.isFinite(); // t ...
- 11.Hibernate一对多关系
创建JavaBean 一方: Customer private long cust_id; private String cust_name; private long cust_user_id; p ...
- 廖雪峰Java10加密与安全-3摘要算法-5Hmac
1 比较MD5和HamcMD5 HmacMD5可以看作带安全salt的MD5 import javax.crypto.KeyGenerator; import javax.crypto.Mac; im ...
- SQLSERVER 数据库管理员的专用连接DAC
DAC:Dedicated Admin Connection 当SQL Server因系统资源不足,或其它异常导致无法建立数据库连接时, 可以使用系统预留的DAC连接到数据库,进行一些问题诊断和故障排 ...
- ArcGIS中线转面
1. 打开ArcMap用Add Data加载shp Polyline线文件. 2. 选Editor编辑\Start Editing开始编辑. 3. 选Editor编辑\More Editing Too ...