当前位置: 首页 > news >正文

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

怎么要微信才能注册账号/fn

要计算删掉某个点,最短路之和。容易想到,从 Floyd 的角度考虑,就是不使用那个点为中转点。

到这里想歪了,想从最短路图来考虑。
正解是,设 \(solve(l, r)\) 表示不使用 \([l, r]\) 的点为中转点。这里考虑分治,容易从 \(solve(l, r)\) 转移到 \(solve(l, mid)\)\(solve(mid+1, r)\)

反思一下优化在什么地方。
如果枚举删除点在什么地方,再枚举中转点,显然太浪费了。
这里通过分治减少了中转点的重复枚举。

不用某个点,相当于使用一段前缀和一段后缀作为中转点。但是合并两段区间的 \(dis\) 值是困难的。用分治的方法可以做到连续段尽量少重复计算。

时间复杂度 \(T(n)=O(n^3)+2T(n/2)\),由主定理得 \(T(n)=O(n^3)\)

#define int long longint ans;
void solve(int l, int r, vector<vector<int> > &dis) {if(l == r) {upw(i, 1, n) upw(j, 1, n) if(i != l && j != l)ans += dis[i][j] < 1e18 ? dis[i][j] : -1ll;return;}vector<vector<int> > dis1 = dis, dis2 = dis;int mid = l + r >> 1;upw(k, l, mid) upw(i, 1, n) upw(j, 1, n) vmin(dis2[i][j], dis2[i][k] + dis2[k][j]);upw(k, mid+1, r) upw(i, 1, n) upw(j, 1, n) vmin(dis1[i][j], dis1[i][k] + dis1[k][j]);solve(l, mid, dis1), solve(mid+1, r, dis2);
}
http://www.hskmm.com/?act=detail&tid=26935

相关文章:

  • 学生管理系统面向对象问题分析
  • 解码Linux环境搭建
  • dns 委派
  • 几个重要的偏微分方程(二)
  • 如何测试台式机电源
  • 「SCOI2015」小凸解密码题解
  • 2025免费好用的度数符号的神器
  • 折腾笔记[31]-在线转换吉卜力风格图片
  • 2025 风淋室厂家 TOP 品牌推荐排行榜,不锈钢风淋室,防爆风淋室,自动门风淋室,风淋门公司推荐
  • 计算机视觉的现状与未来挑战
  • #20232408 2025-2026-1《网络与系统攻防技术》实验一实验报告
  • reLeetCode 热题 100- 239. 滑动窗口最大值 队列 - MKT
  • 深入解析:三维坐标转换
  • ToDo-List EveryDay
  • 英语_阅读_Water and digital life_待读
  • Wails + Go + React跨平台RTSP播放器分享
  • 网络与系统攻防实验报告一 20232408李易骋1
  • [KaibaMath]1003 关于[x+y]≥[x]+[y]的证明
  • 【A】Strategy above the depths
  • 完整教程:Python 训练营打卡 Day 43
  • 快读快写
  • [KaibaMath]1002 关于[x+n]=[x]+n的证明
  • SpringBoot进阶教程(八十七)数据压缩
  • 塑料回收技术创新与可持续发展
  • 共享掩码:TFHE在打包消息上的自举技术
  • 详细介绍:[论文阅读] (38)基于大模型的威胁情报分析与知识图谱构建论文总结(读书笔记)
  • MATLAB安装 - -一叶知秋
  • 2025球墨铸铁管厂家 TOP 企业品牌推荐排行榜,市政球墨铸铁管、球墨铸铁管件、防腐球墨铸铁管、给水球墨铸铁管推荐这十家公司!
  • Say 题选记(10.5 - 10.11)
  • E. Rasta Thamaye Dilo