思路:这道题看n的范围很小(n<=200),显然就用floyd可以解决的问题,但又并不是简单的floyd算法,还是需要一些小小的变化。一开始我的思路是先跑一次弗洛伊德最短路,这样子显然复杂度很高,并且题目中的路径长度是时刻可能更新的,所以我们应该在修建的时候再跑最短路。可以用一个变量来记录修改的点,这样子就可以大幅度的优化。

代码如下

#include<bits/stdc++.h>
using namespace std;
const int maxn=;
const int N=;
int n,m,x,y,v,T;
int t[maxn];
int f[N][N];
int flag[N][N];
int xx,yy,tt;
int start;//动态变化的那个点
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<n;i++)
{
scanf("%d",&t[i]);
f[i][i]=;
}
for(int i=;i<n;i++)
{
for(int j=;j<n;j++)
{
f[i][j]=1e9;
}
}
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&v);
f[x][y]=f[y][x]=v;
}
scanf("%d",&T);
for(int o=;o<=T;o++)
{
start=;//Tle原因
scanf("%d%d%d",&xx,&yy,&tt);
while(t[start]<=tt&&start<n)
{
for(int i=;i<n;i++)
{
for(int j=;j<n;j++)
{
f[i][j]=min(f[i][start]+f[start][j],f[i][j]);
}
}
start++;
}
if(f[xx][yy]==1e9||t[xx]>tt||t[yy]>tt)
{
printf("-1\n");
}
else
{
printf("%d\n",f[xx][yy]);
}
}
return ;
}

等等,但这样似乎只有30分,吸氧50 ,T了7个点

究其原因,是因为每次跑弗洛伊德的时候,start都是又从零开始枚举的,这样显然是没有必要的

所以我们就将他简单改一下

#include<bits/stdc++.h>
using namespace std;
const int maxn=;
const int N=;
int n,m,x,y,v,T;
int t[maxn];
int f[N][N];
int flag[N][N];
int xx,yy,tt;
int start;
int Read(){
int X = ; char ch = getchar() ;
while(ch > '' || ch < '') ch = getchar() ;
while(ch >= '' && ch <= '')
X = (X << ) + (X << ) + (ch ^ ), ch = getchar() ;
return X ;
}
int main()
{
n=Read(),m=Read();
for(int i=;i<n;i++)
{
t[i]=Read();
f[i][i]=;
}
for(int i=;i<n;i++)
{
for(int j=;j<n;j++)
{
f[i][j]=1e9;
}
}
for(int i=;i<=m;i++)
{
x=Read();
y=Read();
v=Read();
f[x][y]=f[y][x]=v;
}
T=Read();
for(int o=;o<=T;o++)
{
xx=Read(),yy=Read(),tt=Read();
while(t[start]<=tt&&start<n)
{
for(int i=;i<n;i++)
{
for(int j=;j<n;j++)
{
f[i][j]=min(f[i][start]+f[start][j],f[i][j]);
}
}
start++;
}
if(f[xx][yy]==1e9||t[xx]>tt||t[yy]>tt)
{
printf("-1\n");
}
else
{
printf("%d\n",f[xx][yy]);
}
}
return ;
}

因为修建的时候那个点都是一遍更新的,并且时间是单调递增的

所以只需要更新一遍就得了,那个动态的点就不用再次清零了。

P1119 灾后重建(floyd进阶)的更多相关文章

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

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

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

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

  3. P1119 灾后重建 floyd

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

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

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

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

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

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

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

  7. 洛谷——P1119 灾后重建

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

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

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

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

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

随机推荐

  1. 爸爸又给Spring MVC生了个弟弟叫Spring WebFlux

    情景引入 很早之前,Java就火起来了,是因为它善于开发和处理网络方面的应用. Java有一个爱好,就是喜欢制定规范标准,但自己又不善于去实现. 反倒是一些服务提供商使用它的规范标准来制造应用服务器而 ...

  2. Python编程从入门到实践笔记——类

    Python编程从入门到实践笔记——类 #coding=gbk #Python编程从入门到实践笔记——类 #9.1创建和使用类 #1.创建Dog类 class Dog():#类名首字母大写 " ...

  3. 简单介绍shell编程四剑客之grep

    概要:分别的作用 grep:文本过滤(模式:pattern)工具,grep,egrep,fgrep,擅长过滤. sed:stream editor 文本编辑工具:(流编辑器),擅长取行.替换. awk ...

  4. .NET Framework VS .NET Core

    本文对应的原文来至 c-sharpcorner 的一篇文章,文末有链接.如有错误,还请指正. 前言 你会为你的下一个应用程序选择哪一种开发平台 - .NET Framework 或者 .NET Cor ...

  5. PHP 安装扩展 phpize

    报错 执行 phpize 时, 报如下错误: grep: /usr/include/php/main/php.h: No such file or directory grep: /usr/inclu ...

  6. 2018-07-10 为Chrome和火狐浏览器编写扩展

    由于扩展标准的逐渐一致, 现在同一扩展代码库已经有可能同时用于Chrome和火狐. 下面是一个简单的工具栏按钮和弹窗(尚无任何实际功能): 代码库地址: nobodxbodon/suan1 所有代码: ...

  7. Android为TV端助力 外挂字幕(设置颜色,大小,位置,微调字幕)

    前提摘要:  可以给电影加字幕,目前支持srt和ass格式, 功能摘要:  支持微调字幕,设置大小,颜色,位置 1 .字幕解析类 package com.hhzt.iptv.lvb_x.utils; ...

  8. 链表倒数第k个节点

    1.一种较笨的办法是先将链表元素入栈,然后出栈找到倒数第k个节点值,再拿着值遍历链表去找到对于节点. 时间复杂度:O(n) (3n 遍历-出栈-遍历) 空间复杂度:O(n) (一个栈) 2.快慢指针, ...

  9. Chromium被用于Microsoft Edge与ChakraCore的未来【译】

    注:英语不好,力求大概能懂.持笔人是:Limin Zhu,好像是中国人,但是没有提供中文版本. 大家好,ChakraCore的朋友们: 昨天,微软公布,Microsoft Edge桌面浏览器采用Chr ...

  10. php中curl返回false的解决办法

    本文介绍一下自己在使用curl中遇到的问题解决办法.希望可以帮助到大家. 原文地址:代码汇个人博客 http://www.codehui.net/info/37.html 首先来看一个封装的curl函 ...