比较有趣的Floyd,刚开始还真没看出来。。。。(下午脑子不太清醒)

  先考虑一下Floyd本身的实现原理,

  1. for(k=1;k<=n;k++)
  2. for(i=1;i<=n;i++)
  3. for(j=1;j<=n;j++)
  4. if(e[i][j]>e[i][k]+e[k][j])
  5. e[i][j]=e[i][k]+e[k][j]

  枚举图中的每一个点,用这些点去逐次更新当前的图,最终得到的dis值就是最终的每两点的最小距离


  没有学过Floyd的同学可以参考啊哈磊的Floyd讲解


  那么对于这道题目,我们就可以直接按照每个点修好的时间排序,按照该顺序加入点,进行Floyd,输出dis值即为结果

 #include <cstdio>
#include <cstring>
#include <algorithm> const int maxn = ;
const int inf = 0x3f3f3f3f >> ;
int dis[maxn][maxn];
int pointTime[maxn];
int askx[], asky[], askt[];
int n, m;
int tot = ;
int x, y, z;
int q;
int cur = ; void update(int x) {
for (int i = ; i < n; i++)
for (int j = ; j < n; j++) {
dis[i][j] = std :: min(dis[i][j], dis[i][x] + dis[x][j]);
}
} int main () {
scanf("%d %d", &n, &m);
for (int i = ; i < n; i++)
scanf("%d", &pointTime[i]);
for (int i = ; i < n; i++)
for (int j = ; j < n; j++) {
if (i == j) dis[i][j] = ;
else dis[i][j] = inf;
}
for (int i = ; i <= m; i++) {
scanf("%d %d %d", &x, &y, &z);
dis[x][y] = z;
dis[y][x] = z;
}
scanf("%d", &q);
for (int i = ; i <= q; i++) {
scanf("%d %d %d", &askx[i], &asky[i], &askt[i]);
while (pointTime[cur] <= askt[i] && cur < n) {
update(cur);
cur++;
}
if (dis[askx[i]][asky[i]] >= inf || pointTime[askx[i]] > askt[i] || pointTime[asky[i]] > askt[i]) printf("-1\n");
else printf("%d\n", dis[askx[i]][asky[i]]);
} return ;
}

洛谷 1119 灾后重建 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] 灾后重建

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

  8. 洛谷P1119灾后重建

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

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

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

随机推荐

  1. 【SQLSERVER】MD5注意事项

    sql中使用MD5加密是很常见的事情,但是不知道注意点的人还是会即便是拷贝网络上的写法也是会出现错误的. 举个例子简单说明: 由上图我们可以发现相同的字符串但是得到的MD5加密的字符却是不相同的,那么 ...

  2. 我是这样记录javascript知识的------Day31

    在陆续研究了几个javascript的几个小应用后,也算对javascript有了更深一点的认识,头脑中大约都有些印象,总体上说却有些模糊,这时.我知道,是时候看看w3cshool的这部分介绍了. 没 ...

  3. HDU 4607 Park visit (求树的直径)

    解题思路: 通过两次DFS求树的直径,第一次以随意点作为起点,找到距离该点距离最远的点,则能够证明这个点一定在树的直径上,然后以该点为起点进行DFS得到的最长路就是树的直径. 最后的询问,假设K &l ...

  4. Ylmf_Ghost_Win7_SP1_x64_2017_0113.iso虚拟机安装

    新建虚拟机,将iso镜像配置好,然后开启虚拟机 一开始选择PQ8.05: 找到“作业”菜单---“建立” ,新建一个“主分区”然后点击确定 新建主分区作业之后,如果需要新建其他分区继续进行即可,本例只 ...

  5. 在Maven中设置Nexus私有服务为中央工厂

    在Maven中设置Nexus私有服务为中央工厂(repository) 2015-12-12 17:45 168人阅读 评论(0) 收藏 举报  分类: Maven(17)  版权声明:本文为博主原创 ...

  6. PL SQL Developer client 连接server

    安装完Oracle,PLSQL之后,在server中打开监听. 计算机右键-管理-服务和应用程序-服务-打开以Oracle开头的服务,特别是监听,这个最重要.详细如图所看到的. (1)配置监听的位置 ...

  7. Tomcat启动时项目反复载入,导致资源初始化两次的问题

    近期在项目开发測试的时候,发现Tomcat启动时项目反复载入,导致资源初始化两次的问题  导致该问题的解决办法: 例如以下图:在Eclipse中将Server Locations设置为"Us ...

  8. luogu2606 排列计数

    题目大意 求满足下列条件的排列$P$的数量:$\forall P_i, P_i>P_{\lfloor \frac{i}{2}\rfloor}$. 思路 从下标入手 反过来想,也就是对$\fora ...

  9. Epos消费管理系统复制迁移SQL SERVER 2005数据库

    先脱机 原来要关闭Epos消费管理系统软件才可以让对应的数据库脱机

  10. Gym-101915C Shahhoud Training Hussain 模拟

    题面 题意:每天有K本书,你最多看P本一天,问N天后多少本书没有看 题解:ans=(K-P)*N; 注意一点就是P>=K的时候,ans=0; #include<bits/stdc++.h& ...