洛谷P1119-灾后重建

题目描述

给出\(B\)地区的村庄数NN,村庄编号从\(0\)到\(N-1\),和所有\(M\)条公路的长度,公路是双向的。

给出第\(i\)个村庄重建完成的时间\(t_i\),你可以认为是同时开始重建并在第\(t_i\)天重建完成,并且在当天即可通车。若\(t_i=0\)则说明地震未对此地区造成损坏,一开始就可以通车。

之后有\(Q\)个询问\((x,y,t)\),对于每个询问你要回答在第\(t\)天,从村庄\(x\)到村庄\(y\)的最短路径长度为多少。如果无法找到从\(x\)村庄到\(y\)村庄的路径,经过若干个已重建完成的村庄,或者村庄\(x\)或村庄\(y\)在第\(t\)天仍未重建完成 ,则需要返回\(-1\)。


题解:

非常有意思的一道\(floyd\)题目。

题目保证村庄\(0\)到村庄\(N\)的修复时间满足\(t_0<t_1<...<t_{n-1}\),而且给出来询问中的\(t\)也是递增的。

那么我们回忆一下\(floyd\)算法的核心代码:

for (int k = 1; i <= N; k++)
for (int i = 1; i <= N; i++)
for (int j = 1; j <= N; j++)
f[i][j] = std::min(f[i][j], f[i][k] + f[k][j]);

这段代码的第一层枚举的\(k\)就是说允许\(k\)点进行中转。

现在题目给出了修建完毕需要的时间并且时间是递增的,给出的询问时间也是递增的,那么每次询问就用\(floyd\)将\(k\)枚举到最后一个村庄这个村庄有\(t_i <= t\),之后检查\(x,y\)点的\(t_x,t_y\)是否大于\(t\)以及\(f[x][y]\)是否为无穷大即可。


AC代码

#include <cstdio>
#include <cstring> const int Maxn = 205;
const int INF = 0x3f3f3f3f; int dis[Maxn][Maxn];
int Time[Maxn]; void update(int k, const int &nv) {
for (int i = 0; i < nv; i++) {
for (int j = 0; j < nv; j++) {
if (dis[i][j] > dis[i][k] + dis[k][j]) {
dis[i][j] = dis[i][k] + dis[k][j];
}
}
}
} void solve() {
int nv, ne;
scanf("%d %d", &nv, &ne);
for (int i = 0; i < nv; i++) {
scanf("%d", Time + i);
}
int u, v, w;
memset(dis, INF, sizeof dis);
for (int i = 0; i < ne; i++) {
scanf("%d %d %d", &u, &v, &w);
dis[u][v] = dis[v][u] = w;
}
int nq, x, y, t, cur = 0;
scanf("%d", &nq);
for (int i = 0; i < nq; i++) {
scanf("%d %d %d", &x, &y, &t);
while (Time[cur] <= t && cur < nv) {
update(cur++, nv);
}
if (Time[x] > t || Time[y] > t || dis[x][y] == INF) {
printf("-1\n");
} else {
printf("%d\n", dis[x][y]);
}
}
} int main() {
solve();
return 0;
}

洛谷P1119-灾后重建-floyd算法的更多相关文章

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

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

  2. 洛谷P1119 灾后重建 Floyd + 离线

    https://www.luogu.org/problemnew/show/P1119 真是有故事的一题呢 半年前在宁夏做过一道类似的题,当时因为我的愚昧痛失了金牌. 要是现在去肯定稳稳的过,真是生不 ...

  3. 洛谷P1119灾后重建——Floyd

    题目:https://www.luogu.org/problemnew/show/P1119 N很小,考虑用Floyd: 因为t已经排好序,所以逐个加点,Floyd更新即可: 这也给我们一个启发,如果 ...

  4. 洛谷 P1119 灾后重建 最短路+Floyd算法

    目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 总结 题面 题目链接 P1119 灾后重建 题目描述 B地区在地震过后,所有村 ...

  5. 洛谷——P1119 灾后重建

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

  6. 洛谷 P1119 灾后重建(Floyd)

    嗯... 题目链接:https://www.luogu.org/problem/P1119 这道题是一个Floyd的很好的题目,在Floyd的基础上加一点优化: 中转点k在这里不能暴力枚举,否则会超时 ...

  7. 洛谷P1119灾后重建

    题目 做一个替我们首先要明确一下数据范围,n<=200,说明n^3的算法是可以过得,而且这个题很明显是一个图论题, 所以我们很容易想到这个题可以用folyd, 但是我在做这个题的时候因为没有深刻 ...

  8. 洛谷 P1119 灾后重建——dijstra

    先上一波题目 https://www.luogu.org/problem/P1119 这道题我们可以将询问按时间排序 然后随着询问将相应已经重建成功的点进行操作 每次更新一个点就以他为起点跑一遍dij ...

  9. 洛谷 [P1119] 灾后重建

    我们发现每次询问都是对于任意两点的,所以这是一道多源最短路径的题,多源最短路径,我们首先想到floyd,因为询问的时间是不降的,所以对于每次询问,我们将还没有进行松弛操作的的点k操作. #includ ...

  10. 洛谷 1119 灾后重建 Floyd

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

随机推荐

  1. LeetCode530. 二叉搜索树的最小绝对差

    题目 又是常见的BST,要利用BST的性质,即中序遍历是有序递增序列. 法一.中序遍历 1 class Solution { 2 public: 3 vector<int>res; 4 v ...

  2. Spring Boot Scheduled定时任务特性

    SpringBoot中的Scheduled定时任务是Spring Boot中非常常用的特性,用来执行一些比如日切或者日终对账这种定时任务 下面说说使用时要注意的Scheduled的几个特性 Sched ...

  3. postman接口测试之复制多个接口或collections到某个子文件夹或collections下

    一.痛点 1.postman只支持复制一个请求,或者一个子文件夹,但是不支持复制多个请求,或者整个collections到某个子文件夹或者某个collections下. 2.网上查了好一会儿,没有一个 ...

  4. Dubbo的设计理念原来就藏在这三张图中

    Dubbo在众多的微服务框架中脱颖而出,占据RPC服务框架的半壁江山,非常具有普适性,熟练掌握 Dubbo的应用技巧后深刻理解其内部实现原理,让大家能更好的掌控工作,助力职场,特别能让大家在面试中脱颖 ...

  5. uni-app开发经验分享三: Vuex实现登录和用户信息留存

    在做用户登录的过程中,其实最重要的是登录成功后的数据要怎么储存,储存到哪里,这里我分享一个利用vuex来实现用户登录和用户数据留存的方法 vuex代码如下: //引入vue和vuex import V ...

  6. 简单明朗的 RNN 写诗教程

    目录 简单明朗的 RNN 写诗教程 数据集介绍 代码思路 输入 and 输出 训练集构建 生成一首完整的诗 代码实现 读取文件 统计字数 构建word 与 id的映射 转成one-hot代码 随机打乱 ...

  7. linux通过ntp同步时间

    1.安装服务 yum install ntp ##安装ntp服务,这个和ntpdate不一样哦,用这个比较好 systemctl start ntpd.service ###启动服务 systemct ...

  8. Web自动化测试python环境中安装 --selenium安装、火狐和火狐驱动版本、谷歌和谷歌驱动版本、测试

    一.安装selenium Windows命令行(cmd)输入pip install selenium(无须指定版本默认最新)或 pip install selenium==3.141.0(可指定版本) ...

  9. SRE SLO On-Call 流程机制 系统稳定性

    开篇词|SRE是解决系统稳定性问题的灵丹妙药吗? https://time.geekbang.org/column/article/212686 这两年,近距离地接触了很多不同类型.不同规模的企业 I ...

  10. the minimum number of bits required to represent x 最小位数

    src/math/bits/bits.go:296 // --- Len ---// Len returns the minimum number of bits required to repres ...