题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5636

解题思路:

这道题可以用Floyd解决,不过需要特殊处理一下:

实际上我们只需要利用添加的那三条边即可,其他的点完全可以通过那三边进行跳转。

也就是说假设求i到j的距离dis[i][j],我们应该尽可能通过那“三座桥梁”,所以我们只需要枚举6个点当中的其中两个即可。

而这6个点之间任意两点最短路是可以求出的。

这题的关键就是模型的转化,比较巧妙,实际上状态只与那6个点有关。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;const int maxn = 100005;
const int mod = 1e9+7;
int n,m,x[6],dis[6][6];void floyd()
{for(int k = 0; k < 6; k++)for(int i = 0; i < 6; i++)for(int j = 0; j < 6; j++)dis[i][j] = min(dis[i][j],dis[i][k] + dis[k][j]);
}int main()
{int t,u,v;scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);for(int i = 0; i < 6; i++) //六个点scanf("%d",&x[i]);for(int i = 0; i < 6; i++)for(int j = 0; j < 6; j++)dis[i][j] = abs(x[i] - x[j]);for(int i = 0; i < 6; i += 2) //新加入的边dis[i][i+1] = dis[i+1][i] = 1;floyd();long long ans = 0;for(int i = 1; i <= m; i++){scanf("%d%d",&u,&v);int len = abs(u - v);for(int j = 0; j < 6; j++)for(int k = 0; k < 6; k++){int tmp = abs(u - x[j]) + abs(v - x[k]) + dis[j][k];len = min(len,tmp);}ans = (ans + (long long) i * len % mod) % mod;}printf("%lld\n",ans);}return 0;
}

hdu 5636 Shortest Path(Floyd最短路)相关推荐

  1. hdu 3631 Shortest Path(Floyd)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3631 Shortest Path Time Limit: 3000/1000 MS (Java/Oth ...

  2. P - The Shortest Path in Nya Graph HDU - 4725

    P - The Shortest Path in Nya Graph HDU - 4725 最短路 不是 每两个点之间按层数设置边权 + 额外边权 TLE 是 相邻两层之间设置边权 + 额外边权 需注 ...

  3. zoj How Many Shortest Path

    How Many Shortest Path 题目: 给出一张图,求解最短路有几条.处理特别BT.还有就是要特别处理map[i][i] = 0,数据有不等于0的情况! 竟然脑残到了些错floyd! ! ...

  4. 程序员的算法课(19)-常用的图算法:最短路径(Shortest Path)

    一.最短路径问题 [google笔试题]一个环形公路,给出相邻两点的距离(一个数组),求任意两点的最短距离,要求空间复杂度不超过O(N). 如果从有向图中某一顶点(称为源点)到达另一顶点(称为终点)的 ...

  5. 弗洛伊德算法c语言path,Floyd算法(弗洛伊德算法)

    算法描述: Floyd算法又称为弗洛伊德算法,插点法,是一种用于寻找给定的加权图中顶点间最短路径的算法.从图的带权邻接矩阵A=[a(i,j)] n×n开始,递归地进行n次更新,即由矩阵D(0)=A,按 ...

  6. [CF843D]Dynamic Shortest Path

    [CF843D]Dynamic Shortest Path 题目大意: 给定一个带权有向图,包含\(n(n\le10^5)\)个点和\(m(m\le10^5)\)条边.共\(q(q\le2000)\) ...

  7. zoj 2760 How Many Shortest Path 最大流

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1760 Given a weighted directed graph ...

  8. AOJ GRL_1_C: All Pairs Shortest Path (Floyd-Warshall算法求任意两点间的最短路径)(Bellman-Ford算法判断负圈)

    题目链接:http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=GRL_1_C All Pairs Shortest Path Input ...

  9. CF938G Shortest Path Queries(线性基/线段树分治/异或)

    CF938G Shortest Path Queries 支持加边删边和查询两点之间的异或最短路,我们可以使用线段树分治,然后利用线性基求解. 但是这里图可能不是联通的,所以查询两点之间的异或和需要边 ...

最新文章

  1. 模拟进程管理小结,编码规范的重要性
  2. (char*)x C语言中的和*的详解
  3. 如何使用CSDN- Markdown编辑器(给自己看的)
  4. mybatis学习(45):开启二级缓存
  5. 【JEECG Dubbo专题】Dubbo+Zookeeper+Spring整合应用篇-Dubbo基于Zookeeper实现分布式服务(二)
  6. python怎么退出全屏_wxPython:退出全屏
  7. python几个版本的区别-Python的这几个版本不同
  8. JavaScript在一个数组中插入另一个数组
  9. Storm Trident示例broadcast
  10. SQLServer 删除表中重复数据(除ID不同的)
  11. 抖音小程序的私域运营
  12. 安装新版的winetricks_winetricks中文修改版(wine模拟器)
  13. 系统学习深度学习(十六)--Overfeat
  14. 【日语】日语中各种句形的简体和敬体
  15. 中科银谷:企查查天眼查的企业工商数据是从哪里来的?
  16. AutoCAD二次开发学习记录一:批量统计dwg文件数据
  17. LabVIEW与Matlab混合编程进行图像处理(附带颜色栏Colorbar)
  18. k8s节点重启后,该节点一直not ready
  19. SpringBoot集成onlyoffice实现word文档编辑保存 [ 转载 ]
  20. 英文状态下输入字母,字母之间的间隔较大怎么解决?

热门文章

  1. python百度翻译包_python百度翻译移动端
  2. HTML5 拖拽的简单实践
  3. spring 监听器 IntrospectorCleanupListener简介
  4. 企业中数据中心管理者地位的逆袭
  5. lintcode:形状工厂
  6. 计算 1!+2!+3!+……+10!
  7. Java URL传参中文乱码问题
  8. logic.c:1:9: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘’ token...
  9. 脚印:关于错误编码的管理的一些思考
  10. formal timetable for cambridge