这是一道考Floyd本质的题。

回忆一下Floyd的原理,三层循环,最外层循环枚举的是中转点,也就是用两点到中转点距离之和来更新最短路。然后来看下题目,重建时间是按照从小到大排序的,也就是说,当第i个村庄刚重建完成时,前i个村庄全部重建完成,而后面的都没有重建完成。那么在枚举中转点的时候就可以在线操作,如果当前询问时间比已经更新过的中转点now的时间大,则now++继续更新直到时间为当前询问时间,输出答案即可。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
#define B cout << "Break" << endl;
#define A(x) cout << #x << "=" << x << endl;
#define inf 1e9
using namespace std;
#define N 210
int t[N],dis[N][N],n,m;
void reset()
{
for(int i = ;i <= N;i++)
{
dis[i][i] = ;
for(int j = ;j <= N;j++)
{
if(i != j) dis[i][j] = inf;
}
}
return;
}
void floyd(int k)
{
for(int i = ;i < n;i++)
{
for(int j = ;j < n;j++)
{
dis[j][i] = dis[i][j] = min(dis[i][j],dis[i][k] + dis[k][j]);//Floyd板子
}
}
return;
}
int main()
{
reset();
scanf("%d %d",&n,&m);
for(int i = ;i < n;i++) scanf("%d",&t[i]);
for(int i = ;i < m;i++)
{
int u,v,w;
scanf("%d %d %d",&u,&v,&w);
dis[u][v] = dis[v][u] = w;
}
int cnt = ;
cin >> cnt;
int now = ;//用now记录当前枚举到的中转点
while(cnt--)
{
int a,b,tt;
scanf("%d %d %d",&a,&b,&tt);
while(t[now] <= tt && now < n)//如果now对应的时间比询问时间少则继续枚举中转点
{
floyd(now);
now++;
}
if(t[a] > tt || t[b] > tt || dis[a][b] == inf) printf("-1\n");//如果当前询问时间小于起点和终点的重建时间或者不连通则无解。
else printf("%d\n",dis[a][b]);
}
}

[Luogu P1119]灾后重建的更多相关文章

  1. [Luogu P1119] 灾后重建 (floyd)

    题面 传送门:https://www.luogu.org/problemnew/show/P1119 Solution 这题的思想很巧妙. 首先,我们可以考虑一下最暴力的做法,对每个时刻的所有点都求一 ...

  2. Luogu P1119 灾后重建 【floyd】By cellur925

    题目传送门 这道题我们很容易想到对于每次询问,都跑一遍最短路(spfa,虽然他已经死了).只需在松弛的时候加入当前相关的点是否已经修好的判断,果不其然的TLE了4个点. (然鹅我第一次用spfa跑的时 ...

  3. 洛谷——P1119 灾后重建

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

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

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

  5. 【Luogu】P1119灾后重建(Floyd)

    题目链接 见题解: feilongz. 这里只放代码. #include<cstdio> #include<cstring> #include<cstdlib> # ...

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

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

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

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

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

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

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

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

随机推荐

  1. mssql sqlserver with cte表达式(递归)找出最顶值的方法分享

    摘要: 下文通过递归的方式找出最顶级部门的方法分享,如下所示: 实验环境:sql server 2008 R2 下文通过cte-with表达式实现递归,获取一个公司的顶级部门,如下所示 例:部门表 c ...

  2. Ecto中的changeset,schema,struct,map

    概要 schema changeset struct map 总结 概要 Ecto 中, 对数据库的操作中经常用到 4 个类型: schema changeset struct map 在 Ecto ...

  3. Gitlab管理网页老是500错误?增加物理内存,增加cpu吧

    上一篇 CentOS 7 系统下 GitLab 搭建 搭建时,是用的是1G内存, 访问gitlab管理网页非常慢,常常出现 500错误 查询后发现: Gitlab的运行对CPU是有要求的:2核心 支持 ...

  4. 浏览器仿EXCEL表格插件 版本更新 - 智表ZCELL产品V1.3.1更新

    智表(zcell)是一款浏览器仿excel表格jquery插件.智表可以为你提供excel般的智能体验,支持双击编辑.设置公式.设置显示小数精度.下拉框.自定义单元格.复制粘贴.不连续选定.合并单元格 ...

  5. mybatis insertUseGeneratedKeys 返回主键为null

    package tk.mybatis.mapper.common.special; import org.apache.ibatis.annotations.InsertProvider; impor ...

  6. vue兄弟之间传值 bus中央事件总线

    创建一个eventVue.js文件 import Vue from 'vue' export default new Vue 父 <template> <div> <di ...

  7. 遍历一个List的几种方法

    方式1.一开始是这样的: public static void test1(List<String> list) { for (int i = 0; i < list.size(); ...

  8. 记录一下不能使用let时如何创建局部变量(使用立即执行函数)

    记录一下阮老师提及的立即执行函数模拟let(以前根本没想到可以这样做啊!) // IIFE 写法 (function () { var tmp = ...; ... }()); // 块级作用域写法 ...

  9. RB-Tree删除详解

    红黑树的删除操作较于插入操作,情况更为复杂: 考虑到红黑节点的差异性,我们在此通过红黑节点来考虑这个问题,即仅仅通过要删除的节点是红节点,还是黑节点来讨论不同的情况: 1  删除的红节点为叶子结点(此 ...

  10. (light oj 1024) Eid (最小公倍数)

    题目链接: http://lightoj.com/volume_showproblem.php?problem=1024 In a strange planet there are n races. ...