原题传送门

这道题是个好题,至少我第一下没有想到是一个古老的算法:$Floyd$

第一眼知道是个最短路,然后就很果断的写了$dijkstra$,对于每组输入求一遍最短路,发现时间很困难。又该写了$SPFA$。当时认为$SPFA$在新加入村庄时只需将其松弛操作即可。

后来发现超时,$80pts$。

事实上在维护新加入的村庄时计算最短路,$Floyd$在这方面很出色。$Floyd$满足三角不等式,即$i$到$j$借助新加入的村庄$k$进行维护,而且只需$O(n^2)$

综上,复杂度为$O(n^3)$。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5
 6 using namespace std;
 7
 8 #define re register
 9 #define rep(i, a, b) for (re int i = a; i <= b; ++i)
10 #define repd(i, a, b) for (re int i = a; i >= b; --i)
11 #define maxx(a, b) a = max(a, b);
12 #define minn(a, b) a = min(a, b);
13 #define LL long long
14 #define inf (1 << 30)
15
16 inline int read() {
17     int w = 0, f = 1; char c = getchar();
18     while (!isdigit(c)) f = c == '-' ? -1 : f, c = getchar();
19     while (isdigit(c)) w = (w << 3) + (w << 1) + (c ^ '0'), c = getchar();
20     return w * f;
21 }
22
23 const int maxn = 200 + 5;
24
25 int dis[maxn][maxn], n, m, q, t[maxn];
26
27 int main() {
28     memset(dis, 0x3f, sizeof(dis));
29
30     n = read(), m = read();
31
32     rep(i, 0, n-1) t[i] = read();
33
34     rep(i, 1, m) {
35         int u = read(), v = read();
36         dis[u][v] = dis[v][u] = read();
37     }
38
39     q = read();
40
41     int k = 0;
42
43     rep(kase, 1, q) {
44         int x = read(), y = read(), T = read();
45         while (k < n && T >= t[k]) {
46             rep(i, 0, n-1)
47                 rep(j, 0, n-1)
48                     if (i != k && j != k) minn(dis[i][j], dis[i][k] + dis[k][j]);
49             k++;
50         }
51         if (t[x] > T || t[y] > T || dis[x][y] == 1061109567) printf("-1\n");
52         else printf("%d\n", dis[x][y]);
53     }
54
55     return 0;
56 }

转载于:https://www.cnblogs.com/ac-evil/p/10321435.html

[洛谷P1119]灾后重建相关推荐

  1. 洛谷P1119 灾后重建 图论 脑洞题

    洛谷P1119 灾后重建 图论   脑洞题   floyd    floyd中 k 的意义 通过前 k 个点 作为中间的节点 更新 i 到 j 的最短路 也就是 只经过前 k 个点 的最短路 帮助理解 ...

  2. 洛谷P1119 灾后重建[Floyd]

    题目背景 B地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响.但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车.换句话说,只有连接着两个重建完成的村庄的公路才能 ...

  3. 洛谷——P1119 灾后重建

    https://www.luogu.org/problem/show?pid=1119 题目背景 B地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响.但是在村庄重建好之前, ...

  4. 洛谷P1119 灾后重建

    利用Floyd最外层为中转点的性质. #include <cstdio> #include <cstring> #include <iostream> #inclu ...

  5. [题解]洛谷P1119 灾后重建

    链接 做死我了,,,半夜找题自虐 floyd算法 #include<cstdio> #include<algorithm> #include<cstring> #i ...

  6. 洛谷 1119 灾后重建 Floyd

    比较有趣的Floyd,刚开始还真没看出来....(下午脑子不太清醒) 先考虑一下Floyd本身的实现原理, for(k=1;k<=n;k++) for(i=1;i<=n;i++) for( ...

  7. P1119 灾后重建(基础Floyd原理的理解和运用)

    洛谷:灾后重建 先看数据,显然很小,题目又要回答任意点到任意点的最短路,显然多源汇最短路问题,义眼钉真Floyd 但询问卡死了- 5W一开始直接劝退,没什么很好的头绪. 结果此题只是一道简单的基于Fl ...

  8. 洛古1119 灾后重建

    灾后重建 题目背景:        B地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响.但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车.换句话说,只有连接着两 ...

  9. P1119 灾后重建(经典floyd)

    https://www.luogu.org/problemnew/show/P1119 题目背景 BB地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响.但是在村庄重建好之前 ...

最新文章

  1. Shell中的/dev/null 21 与 21 /dev/null 与/dev/null 的区别
  2. 31.4. Open Source Development for the D Programming Language
  3. (转) OpenLayers3基础教程——OL3 介绍control
  4. 欧几里德投影(Euclidean projection)
  5. jquery调用asp.net 页面后台方法
  6. C++ 线程安全的单例模式
  7. try...catch()
  8. 异步通信在生活中的例子_AJAX简单异步通信实例分析
  9. android xml 列表展示,Android中ListView实现展示列表数据
  10. uva 1378 - A Funny Stone Game sg博弈
  11. python实现项目的复制_python实现复制大量文件功能
  12. SQL Server-【知识与实战II】条件查询、比较运算符查询、模糊查询、枚举查询、范围查询、空值查询、多重条件查询
  13. 【Gym-101775 J】Straight Master【差分、贪心】
  14. 中兴面试题 01背包问题
  15. 最大子段和C语言实现
  16. TinyGPS使用说明
  17. 幻幕广告上线,沉浸式体验塑造大片即视感
  18. HTML5 Canvas 绘制加拿大枫叶旗
  19. Gate 用户手册(一)总体概念
  20. CSDN如何快速提升等级

热门文章

  1. 【转载+思考】追问泄题之源:命题权寻租打开方便之门
  2. 小白入门使用Nginx基础的常用操作
  3. 亚洲诚信亮相2018天翼智能生态博览会
  4. arm平台函数传递参数,反汇编实例分析
  5. 使用Maven开发Hadoop
  6. 使用代码更新 UIVersion 属性
  7. 进军SharePoint,资料先行....
  8. html带提示的行号编辑框,文本框中显示行号[兼容IE/FF浏览器}
  9. MySQL常用命令用法总结
  10. android解析JSON数组