先上一波题目 https://www.luogu.org/problem/P1119

这道题我们可以将询问按时间排序 然后随着询问将相应已经重建成功的点进行操作

每次更新一个点就以他为起点跑一遍dijstra

当然这样还远远不够 因为新加入一个点可能影响到另外两个点之间的最短路

所以我们跑完dijstra之后还需要n方枚举两个点 看看他们是否能通过这个点更新最短路

这样做的复杂度 每次更新一个点复杂度是 n^2+mlogn 所以整体最差复杂度是 n^3logn

题目n最大为200 明显复杂度是合理的 实际测评跑起来也是飞快

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<cmath>
using namespace std;
const int M=,inf=1e9+;
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
int n,m,Q,wh[M];
struct node{int to,next,w;}e[M*M];
int first[M],cnt;
void ins(int x,int y,int w){e[++cnt]=(node){y,first[x],w}; first[x]=cnt;}
int dis[M][M],in[M],ans[M*M];
struct qaq{int x,y,id,T;}s[M*M];
int cmp(qaq x,qaq y){return x.T<y.T;}
struct qwq{
int id,d;
bool operator<(const qwq&x)const{return x.d<d;}
};
priority_queue<qwq>q;
void dj(int S){
in[S]=; dis[S][S]=;
q.push((qwq){S,dis[S][S]});
while(!q.empty()){
qwq x=q.top(); q.pop();
if(dis[S][x.id]<x.d) continue;
for(int i=first[x.id];i;i=e[i].next){
int now=e[i].to;
if(!in[now]) continue;
if(dis[S][now]>dis[S][x.id]+e[i].w){
dis[S][now]=dis[S][x.id]+e[i].w;
q.push((qwq){now,dis[S][now]});
}
}
}
for(int i=;i<=n;i++)if(in[i]) dis[i][S]=dis[S][i];
for(int i=;i<=n;i++)if(in[i])
for(int j=;j<=n;j++)if(in[j])
if(dis[i][j]>dis[i][S]+dis[S][j]) dis[i][j]=dis[i][S]+dis[S][j];
}
int main(){
int x,y,w,now=;
n=read(); m=read();
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)if(i!=j) dis[i][j]=inf;
for(int i=;i<=n;i++) wh[i]=read(),in[i]=;
for(int i=;i<=m;i++) x=read()+,y=read()+,w=read(),ins(x,y,w),ins(y,x,w);
Q=read();
for(int i=;i<=Q;i++) s[i].x=read()+,s[i].y=read()+,s[i].T=read(),s[i].id=i;
sort(s+,s++Q,cmp);
for(int i=;i<=Q;i++){
while(now<=n&&wh[now]<=s[i].T) dj(now),now++;
if((!in[s[i].x])||(!in[s[i].y])||(dis[s[i].x][s[i].y]==inf)) ans[s[i].id]=-;
else ans[s[i].id]=dis[s[i].x][s[i].y];
}
for(int i=;i<=Q;i++) printf("%d\n",ans[i]);
return ;
}

洛谷 P1119 灾后重建——dijstra的更多相关文章

  1. 洛谷——P1119 灾后重建

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

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

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

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

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

  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)

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

  7. 洛谷 [P1119] 灾后重建

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

  8. 洛谷P1119灾后重建

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

  9. 洛谷P1119 灾后重建

    传送门 题目大意:点被破坏,t[i]为第i个点修好的时间,且t[1]<t[2]<t[3].. 若干询问,按时间排序,询问第t时刻,u,v的最短路径长度. 题解:floyed 根据时间加入点 ...

随机推荐

  1. Codeforces - 1191B - Tokitsukaze and Mahjong - 模拟

    https://codeforces.com/contest/1191/problem/B 小心坎张听的情况. #include<bits/stdc++.h> using namespac ...

  2. cocos2d-x 3.0正式版创建project笔记

    cocos2d-x 3.0正式版创建project笔记     不知道Beta版那个高大上的对话框哪里去鸟,正式版又回归到命令行,不知道触碰如此频繁的玩弄追随者的编程习惯是出于什么心理,假设不是为了这 ...

  3. pycharm修改字体大小和主题

    一,修改文字大小: 二,修改主题:你可能对编辑器的外观仍不满意,例如你希望将文档字符串改变为另外一种颜色,下面介绍具体更改方法:  

  4. Gradle中的GroupID和ArtifactID指的是什么?

    GroupId和ArtifactId被统称为“坐标”是为了保证项目唯一性而提出的,如果你要把你项目弄到maven本地仓库去,你想要找到你的项目就必须根据这两个id去查找. GroupId一般分为多个段 ...

  5. JSON —— 数据结构

    1.什么是 JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写 JSON 采用完全独立于语言的文本格式,但是也使用了类似于 C ...

  6. 记录使用node启用微信公众平台服务器配置

    在微信公众平台的基本信息里面的,修改服务器配置后会有下面的界面. EncodingAESKey是随机生成的,加密方式根据需要自己选择. 关于URL和Token: URL:填写之后会向这个URL发送一个 ...

  7. 解析天启rk3288源码 /kernel/drivers/char/virtd

    virtd为编译后产生的中间文件,可使用ELF格式逆向 1.ELF文件内容解析readelf: 可解析ELF文件的所有内容;strings: 查看ELF文件中的字符串;file   : 查看ELF文件 ...

  8. mysql授予权限

    grant show databases on *.* to 'asg'@'%'; grant select on *.* to 'asg'@'%'; grant show view on *.* t ...

  9. 【LeetCode】几何学 geometry(共2题)

    [587]Erect the Fence [892]Surface Area of 3D Shapes

  10. LeetCode(力扣)——Search in Rotated Sorted Array 搜索旋转排序数组 python实现

    题目描述: python实现 Search in Rotated Sorted Array 搜索旋转排序数组   中文:假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1 ...