[原创]hdu 5636 &&bestcoder #74 1002 Shortest Path [floyd+ 松弛]【图论 + 思维】
2017-06-06 19:38:38 Tabris_ 阅读数:256
博客爬取于 2020-06-14 22:40:04
以下为正文
版权声明:本文为 Tabris 原创文章,未经博主允许不得私自转载。
https://blog.csdn.net/qq_33184171/article/details/72886742
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5636
——————————————————————————————————————————
Shortest Path
Accepts: 40
Submissions: 610
Time Limit: 4000/2000 MS (Java/Others)
Memory Limit: 131072/131072 K (Java/Others)
问题描述
有一条长度为 n 的链。 节点 ii 和 i+1 之间有长度为 1 的边。 现在又新加了 3 条边, 每条边长度都是 1. 给出 m 个询问, 每次询问两点之间的最短路。
输入描述
输入包含多组数据。 第一行有一个整数 T, 表示测试数据的组数。 对于每组数据:
第一行包含 2 个整数 n 和 m (1 \le n,m \le 10^5)表示节点的数目和询问数目。 接下来一行包含 66 个有空格分开的整数a_1, b_1, a_2, b_2, a_3, b_3 (1 \le a_1,a_2,a_3,b_1,b_2,b_3 \le n)表示新加的三条边为(a_1,b_1), (a_2,b_2), (a_3,b_3). 接下来 mm 行, 每行包含两个整数s_i和t_i (1 \le s_i, t_i \le n), 表示一组询问。
所有数据中 mm 的和不超过 10^6106.
输出描述
对于每组数据, 输出一个整数S=(\displaystyle\sum_{i=1}^{m} i \cdot z_i) \text{ mod } (10^9 + 7), 其中 z_izi 表示第 ii 组询问的答案。
输入样例
1
10 2
2 4 5 7 8 10
1 5
3 1
输出样例
7
——————————————————————————————————————————
首先对于给了 N 个节点求最短路 一定不能直接做了,
发现他加的三条边与查询的边一共就 8 个点,那么每次对这 8 个点写 folyd 不就好了,O(888)然而写了一发 TLE
然后想这样怎么能在优化呢?
想到给定的那 6 个点是固定的,那么多次求就浪费了
然后考虑,让我查询的就一条边,那么其实也就是 66 条边对这条边松弛,那么复杂度就是 O(66),
附本题代码
——————————————————————————————————————————
1 | # include <bits/stdc++.h> |


