洛谷 P1119 灾后重建(Floyd)
嗯...
题目链接:https://www.luogu.org/problem/P1119
这道题是一个Floyd的很好的题目,在Floyd的基础上加一点优化:
中转点k在这里不能暴力枚举,否则会超时,我们则可以用时间的限制来优化一下,用一个while,只有中转站被修复(即中转站修复时间小于t)时,k才能作为中转站,也就是指枚举在t时,被修复了的中转站,这样时间复杂度会降低一些...
本题细节问题:
1.每个村庄的下标是从0开始的
2.因为memset比较神奇,所以最后判-1时,要找一个比0x3f的数大的数进行判断,并且是>=
AC代码:
- #include<cstdio>
- #include<iostream>
- #include<cstring>
- using namespace std;
- int g[][], a[], n, m;
- inline void update(int k){
- for(int i = ; i < n; i++){
- for(int j = ; j < n; j++){
- g[i][j] = min(g[i][j], g[i][k] + g[k][j]);
- }
- }
- return;
- }
- int main(){
- memset(g, 0x3f, sizeof(g));
- scanf("%d%d", &n, &m);
- for(int i = ; i < n; i++) {scanf("%d", &a[i]); g[i][i] = ;}//枚举细节
- for(int i = ; i <= m; i++) {
- int x, y, z;
- scanf("%d%d%d", &x, &y, &z);
- g[x][y] = g[y][x] = z;
- }
- int q, now = ;
- scanf("%d", &q);
- for(int i = ; i <= q; i++) {
- int u, v, t;
- scanf("%d%d%d", &u, &v, &t);
- while(a[now] <= t && now < n){
- update(now);
- now++;
- }
- if(g[u][v] >= 0x3f3f3f3f || a[u] > t || a[v] > t) printf("-1\n");
- else printf("%d\n", g[u][v]);
- }
- return ;
- }
AC代码
洛谷 P1119 灾后重建(Floyd)的更多相关文章
- 洛谷P1119 灾后重建[Floyd]
题目背景 B地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响.但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车.换句话说,只有连接着两个重建完成的村庄的公路才能 ...
- 洛谷P1119 灾后重建 Floyd + 离线
https://www.luogu.org/problemnew/show/P1119 真是有故事的一题呢 半年前在宁夏做过一道类似的题,当时因为我的愚昧痛失了金牌. 要是现在去肯定稳稳的过,真是生不 ...
- 洛谷P1119灾后重建——Floyd
题目:https://www.luogu.org/problemnew/show/P1119 N很小,考虑用Floyd: 因为t已经排好序,所以逐个加点,Floyd更新即可: 这也给我们一个启发,如果 ...
- 洛谷 P1119 灾后重建 最短路+Floyd算法
目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 总结 题面 题目链接 P1119 灾后重建 题目描述 B地区在地震过后,所有村 ...
- 洛谷——P1119 灾后重建
P1119 灾后重建 题目背景 B地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响.但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车.换句话说,只有连接着两个重 ...
- 洛谷 P1119 灾后重建——dijstra
先上一波题目 https://www.luogu.org/problem/P1119 这道题我们可以将询问按时间排序 然后随着询问将相应已经重建成功的点进行操作 每次更新一个点就以他为起点跑一遍dij ...
- 洛谷 [P1119] 灾后重建
我们发现每次询问都是对于任意两点的,所以这是一道多源最短路径的题,多源最短路径,我们首先想到floyd,因为询问的时间是不降的,所以对于每次询问,我们将还没有进行松弛操作的的点k操作. #includ ...
- 洛谷P1119灾后重建
题目 做一个替我们首先要明确一下数据范围,n<=200,说明n^3的算法是可以过得,而且这个题很明显是一个图论题, 所以我们很容易想到这个题可以用folyd, 但是我在做这个题的时候因为没有深刻 ...
- 洛谷 1119 灾后重建 Floyd
比较有趣的Floyd,刚开始还真没看出来....(下午脑子不太清醒) 先考虑一下Floyd本身的实现原理, for(k=1;k<=n;k++) for(i=1;i<=n;i++) for( ...
随机推荐
- CMD命令行实现复制一张图片1000份:
CMD命令行实现复制一张图片1000份: 进入CMD命令行后,进入图片所在目录,执行以下命令: FOR /L %i IN (,,) DO COPY .jpg %i.jpg 模板图片名字为1.jpg,执 ...
- Qt5 error LNK2019 无法解析的外部符号的解决办法
今天在使用Qt Create 4.5.2时遇到一个莫名其妙的问题: 在原有工程里添加一个新类(有界面的),在调用的mainwindow.cpp中添加#include "a.h",然 ...
- opencv:USM锐化
USM:unsharp mask 对小的细节干扰小,对大的细节进行锐化 Mat dst; Mat blur_image; GaussianBlur(src, blur_image, Size(3, 3 ...
- Windows10_64位搭建WampServer(运行php代码)教程及问题
Windows10_64位搭建WampServer(运行php代码)教程及问题 笔者最近学习PHP,想通过web页面的形式更加形象生动的了解php代码的原理. 于是,这次就通过WampS ...
- 威佐夫博奕(Wythoff Game)poj 1067
有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜. 这种情况下是颇为复杂的.我们用(ak,bk)(ak ≤ bk ,k=0,1,2,…, ...
- c++调用自己编写的静态库(通过eclipse)
转:https://blog.csdn.net/hao5335156/article/details/80282829 参考:https://blog.csdn.net/u012707739/arti ...
- 【 SSH 实例】使用ssh开发的简单项目
简单的员工管理项目,使用spring.struts1.hibernate开发 applicationContext.xml <?xml version="1.0" encod ...
- 【游戏体验】Shoot'm(暴打火柴人)
>>>点此处可试玩无敌版<<< 注意,本游戏含有少量暴力元素,13岁以下的儿童切勿尝试本款游戏 生活有压力,学习不如意,你可以尝试这款游戏发泄心中的不满 个人测评 ...
- ACM的探索之Just Skip The Problem
-----------------心怀虔诚,奋勇前进,fighting!!!!!! Problem Description: inclusively: 包括一切地;包含地 simul ...
- python实现获取电脑IP、主机名、Mac地址
import socket import uuid # 获取主机名 hostname = socket.gethostname() #获取IP ip = socket.gethostbyname(ho ...