题目链接:https://nanti.jisuanke.com/t/A1108

这道题还挺有意思的。让我对Floyd的了解又加深了一点。

首先我们重新审视Floyd这三重循环到底有什么用?第一层是枚举中间结点,第二三层是枚举路径起点和终点。那么是不是当第一层循环还没枚举到的点,此时的最短路就不会经过这这些点呢?

答案是肯定的。所以这道题也就可以做了。

题目是要求我们计算  第一层循环缺一个点的情况下  的所有最短路之和。我们当然可以枚举这个缺的点,那么时间复杂度是O(n^4)。不能接受。

那么我们可以反过来考虑不是缺点,而是考虑逐渐加点,逐渐加到缺一个点的情况然后更新答案。于是我们可以分治,分治的过程就是加点的过程。

solve(l,r)代表除了区间[l,r]的点其他点都加到最短路了,那么分治到l==r的时候就可以统计答案了。

时间复杂度O(n^2*logn)。细节详见代码:

#include<bits/stdc++.h>
using namespace std;
const int N=3e2+;
const int INF=0x3f3f3f3f;
int n,a[N][N];
long long ans; void solve(int l,int r) {
if (l==r) {
for (int i=;i<=n;i++) for (int j=;j<=n;j++)
if (i!=l && j!=l)
if (a[i][j]>=INF) ans+=-; else ans+=a[i][j];
return;
}
int mid=l+r>>; int b[N][N];
memcpy(b,a,sizeof(a));
for (int k=mid+;k<=r;k++)
for (int i=;i<=n;i++)
for (int j=;j<=n;j++)
a[i][j]=min(a[i][j],a[i][k]+a[k][j]);
solve(l,mid); memcpy(a,b,sizeof(b));
for (int k=l;k<=mid;k++)
for (int i=;i<=n;i++)
for (int j=;j<=n;j++)
a[i][j]=min(a[i][j],a[i][k]+a[k][j]);
solve(mid+,r);
} int main()
{
cin>>n;
for (int i=;i<=n;i++) for (int j=;j<=n;j++) {
scanf("%d",&a[i][j]);
if (a[i][j]==-) a[i][j]=INF;
}
solve(,n);
cout<<ans<<endl;;
return ;
}

最新文章

  1. VmWare平台Windows Server 2012 无响应宕机
  2. Java设计模式之创建型模式
  3. Centos 7 ASP.NET Core 1.0 Docker部署
  4. 使用dnsmasq来提升CentOS上网速度
  5. 玩转PowerShell第一节——【后台任务处理】-技术&amp;分享
  6. log4j日志优先级问题的后续
  7. blade模版之页面的嵌套
  8. apache 多站点搭建
  9. BZOJ 1151 傲娇的人 排序
  10. Openjudge-计算概论(A)-找和为K的两个元素
  11. E - 小晴天老师系列——我有一个数列!
  12. IIS 反向代理 golang web开发
  13. LeetCode之“排序”:Largest Number
  14. shell脚本实现并发控制
  15. 在ASP.NET Core中实现自定义验证特性(Custom Validation Attribute)
  16. hdu 3832 Earth Hour bfs
  17. Python 实例变量
  18. BZOJ.1017.[JSOI2008]魔兽地图(树形DP 背包DP)
  19. ArcGIS 在高清屏中主界面界面字体和图标显示过小,如何解决?
  20. Dll 使用 PChar 参数的小例子 - 回复 &quot;linximf&quot; 的问题

热门文章

  1. JQuery通过URL获取图片宽高
  2. 解决error: Microsoft Visual C++ 14.0 is required 问题
  3. C盘Administrator中 .m2/repository里面是什么
  4. Sql语法整理-图片版....
  5. Xcode 编辑器之关于Other Linker Flags相关问题
  6. paper 144:人生苦短,快用Python
  7. python random模块随机取list中的某个值
  8. 51NOD 1005
  9. restTemplate源码详解深入剖析底层实现思路
  10. js实现复选框全选/全不选/反选