[洛谷P1119]灾后重建
原题传送门
这道题是个好题,至少我第一下没有想到是一个古老的算法:$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]灾后重建相关推荐
- 洛谷P1119 灾后重建 图论 脑洞题
洛谷P1119 灾后重建 图论 脑洞题 floyd floyd中 k 的意义 通过前 k 个点 作为中间的节点 更新 i 到 j 的最短路 也就是 只经过前 k 个点 的最短路 帮助理解 ...
- 洛谷P1119 灾后重建[Floyd]
题目背景 B地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响.但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车.换句话说,只有连接着两个重建完成的村庄的公路才能 ...
- 洛谷——P1119 灾后重建
https://www.luogu.org/problem/show?pid=1119 题目背景 B地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响.但是在村庄重建好之前, ...
- 洛谷P1119 灾后重建
利用Floyd最外层为中转点的性质. #include <cstdio> #include <cstring> #include <iostream> #inclu ...
- [题解]洛谷P1119 灾后重建
链接 做死我了,,,半夜找题自虐 floyd算法 #include<cstdio> #include<algorithm> #include<cstring> #i ...
- 洛谷 1119 灾后重建 Floyd
比较有趣的Floyd,刚开始还真没看出来....(下午脑子不太清醒) 先考虑一下Floyd本身的实现原理, for(k=1;k<=n;k++) for(i=1;i<=n;i++) for( ...
- P1119 灾后重建(基础Floyd原理的理解和运用)
洛谷:灾后重建 先看数据,显然很小,题目又要回答任意点到任意点的最短路,显然多源汇最短路问题,义眼钉真Floyd 但询问卡死了- 5W一开始直接劝退,没什么很好的头绪. 结果此题只是一道简单的基于Fl ...
- 洛古1119 灾后重建
灾后重建 题目背景: B地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响.但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车.换句话说,只有连接着两 ...
- P1119 灾后重建(经典floyd)
https://www.luogu.org/problemnew/show/P1119 题目背景 BB地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响.但是在村庄重建好之前 ...
最新文章
- Shell中的/dev/null 21 与 21 /dev/null 与/dev/null 的区别
- 31.4. Open Source Development for the D Programming Language
- (转) OpenLayers3基础教程——OL3 介绍control
- 欧几里德投影(Euclidean projection)
- jquery调用asp.net 页面后台方法
- C++ 线程安全的单例模式
- try...catch()
- 异步通信在生活中的例子_AJAX简单异步通信实例分析
- android xml 列表展示,Android中ListView实现展示列表数据
- uva 1378 - A Funny Stone Game sg博弈
- python实现项目的复制_python实现复制大量文件功能
- SQL Server-【知识与实战II】条件查询、比较运算符查询、模糊查询、枚举查询、范围查询、空值查询、多重条件查询
- 【Gym-101775 J】Straight Master【差分、贪心】
- 中兴面试题 01背包问题
- 最大子段和C语言实现
- TinyGPS使用说明
- 幻幕广告上线,沉浸式体验塑造大片即视感
- HTML5 Canvas 绘制加拿大枫叶旗
- Gate 用户手册(一)总体概念
- CSDN如何快速提升等级