【题解】洛谷P1119 灾后重建(floyd)

洛谷P1119 灾后重建(普及+/提高)——Floyd算法 如果无法找到从 x 村庄到 y 村庄的路径,经过若干个已重建完成的村庄,或者村庄 x 或村庄 y 在第 t 天仍未重建完成,则需要输出 −1。如果在第 t 天无法找到从 x 村庄到 y 村庄的路径,经过若干个已重建完成的村庄,或者村庄 x 或村庄 y 在第 t 天仍未修复完成,则输出 −1。接下来 M 行,每行 3 个非负整数 i,j,w,w 不超过 10000,表示了有一条连接村庄 i 与村庄 j 的道路,长度为 w,保证 i=j,且对于任意一对村庄只会存在一条道路。 阅读详情

这是一个有条件的最短路问题,当时间为t时某个村庄才会被修好,修好的村庄之间的路才能贯通、求最小路,那么我们就记录t数组,在floyd前提条件下判断中间点村庄修好的时间是否小于等于给的时间,得到最短路。如果开头结尾村庄修好的时间比给的时间小或相等,并且开头和结尾的村庄有边相连,那么就输出最短路的答案,否则输出-1

 

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn=200+10;
int a[maxn][maxn];
int t[maxn];
int n,m,q;
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=0;i<n;i++)
	{
		scanf("%d",&t[i]);
	}
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
			a[i][j]=1e9;
	for(int i=1;i<=m;i++)
	{
		int x,y,z;
		scanf("%d%d%d",&x,&y,&z);
		a[x][y]=a[y][x]=z;
	}
	scanf("%d",&q);
	int k=0;
	for(int l=1;l<=q;l++)
	{
		int start,end,time;
		cin>>start>>end>>time;
		for(;(k<n)&&(t[k]<=time);k++)
			for(int i=0;i<n;i++)
				for(int j=0;j<n;j++)
					a[i][j]=min(a[i][j],a[i][k]+a[k][j]);
					
		if(t[start]<=time&&t[end]<=time&&a[start][end]!=1e9)
		{
			printf("%d\n",a[start][end]);	
		}
		else printf("-1\n");
	}
	return 0;
}

 

洛谷 P1119:灾后重建 ← Floyd算法 + 优化 B 地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响。但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车。换句话说,只有连接着两个重建完成的村庄的公路才能通车,只能到达重建完成的村庄。给出 B 地区的村庄数 N,村庄编号从 0 到 N−1,和所有 M 条公路的长度,公路是双向的。并给出第 i 个村庄重建完成的时间 t i,你可以认为是同时开始重建并在第 t i天重建完成,并且在当天即可通车。若 t i为 0 则说明地震未对此地区造成损坏,一开始就可以通车。 阅读详情

相关推荐

【代码超详解】洛谷 P1119 灾后重建(Floyd算法)

一、题目描述 二、算法分析说明与代码编写指导 以下是Floyd算法: 设带权连通图G(V, E),边权代表边长(直接相连两点的通路长度),二维数组d[i][j]表示顶点i到顶点j的最小通路距离,其中通路还允许 经过0到k-1顶点(可以包含i、j,但多次经过一个点(存在环)的路径肯定不是最短的,会被筛掉)。 算法的原理是:如果一条路径仅经过若干个点,且已确认是最短路径,那么如果仍然想尝试继续缩短,...

COFACTOR 616

【题解】洛谷P1119 灾后重建(floyed算法)

因为要让每个节点都被考虑到一次,即都被传入floyed一次,所以mid一步一步走,最终所有节点都会被当作中间点传入floyed一次。注意题目和模版的区别,根据区别,优化代码,有可能需要我们优化时间复杂度,这时看看哪个for可以优化,优化的时候,考虑到数据的单调性。mid只要走到2就能保证所有的<=T的节点被考虑到了,因为t数组是单调递增的,不会出现 1 2 3 4 2的情况。而结合这道题中,只有当结点的修建时间<=T时,才能通过,加上t数组的数据和T都是单调递增。而floyed里面又有3层循环。

aA467646767的博客 654

Clawdbot完 整安装与使⽤指南(保姆级教程)

Clawdbot 是⼀款开源个⼈ AI 智能体(Personal AI Agent),核⼼优势为本地部署+系统级执⾏+全渠道交互,可通过聊天⼯具(Telegram/WhatsApp 等)下达指令,⾃动完成⽂件整理、代码部署、⽇程同步等任务,所有数据本地存储,隐私零泄露。截⾄2026年 1 ⽉,GitHub 星标突破 4 万+,⽀持 Windows/Mac/Linux/云服务器多平台。

A1609926242的博客 1612

【洛谷】P1119 灾后重建(Floyd好题)

题目大意:给出n个村庄,m条路,给出每个村庄修建完成的时间点(修建完成代表可以经过或者到达这个村庄),接下来有q次查询,每次查询给出村庄x,村庄y,还有当前的时间t,让你求在当前的t时间点下,村庄x与y之间的最短路,如果x,y不可到达则输出-1 解题思路:一开始用dijkstra堆优化一直超时,也确实没办法,对于每次查询都要重新调用一次dijkstra(),也没有想到好的优化剪枝方式,需要注意这个题目还是很良心的,按照t升序给出,不需要我们重新对t进行排序,这样的话用Floyed求任意两点间...

_C9的博客 321

STM32在六轴机械臂实时控制中的选型与分层架构设计

嵌入式实时控制系统中,微控制器的选型直接决定运动控制精度与系统可靠性。其核心在于匹配确定性中断响应、低延迟外设协同与工业协议栈支持等硬性指标。STM32凭借Cortex-M内核的NVIC调度能力、成熟HAL库及CAN FD/高级定时器等专用外设,在机电一体化场景中成为伺服控制中枢的首选。相比ESP32等通用MCU,STM32在硬实时性、EMC认证生态和工业总线兼容性上具备不可替代优势。本文围绕GTB六轴机械臂项目,详解基于STM32F407的硬件抽象层配置、FreeRTOS任务调度、事件队列解耦及闭环控制数

jupi8的博客 755

YOLO26优化:注意力魔改 | 用于微小目标检测的上下文增强和特征细化网络ContextAggregation,助力小目标检测,暴力涨点

用于微小目标检测的上下文增强和特征细化网络ContextAggregation,助力小目标检测

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 490

【灾后重建】蓝桥杯第六届省赛C/C++大学A组(并查集+Kruskal算法)

Pear市一共有N个居民点,居民点之间有M条双向道路相连。这些居民点两两之间都可以通过双向道路到达。这种情况一直持续到最近,一次严重的地震毁坏了全部M条道路。

KI的博客 8万+

4.6 知识库使用指南:如何让AI Agent拥有专业知识

本文介绍了如何为AI Agent构建和使用知识库。知识库的作用是为Agent提供专业知识,包含文档、数据和规则,可用于专业问答和知识检索。使用方法包括创建知识库(上传文档)、向量化处理、知识检索以及在Agent中的应用。核心要点是理解知识库的价值和使用流程。文章还提出了构建方法、检索优化和应用实践等思考题,建议准备高质量数据、优化检索效果并持续更新知识库。下节将介绍用LangGraph构建复杂AI应用。

yonggeit的博客 3012

2015蓝桥杯C++A组——灾后重建

灾后重建题目链接 目录问题描述题目解析最小生成树简单算法C++代码 问题描述 【题目描述】 【输入】 【输出】 【样例输入】 7 10 4 1 3 10 2 6 9 4 1 5 3 7 4 3 6 9 1 5 8 2 7 4 3 2 10 1 7 6 7 6 9 1 7 1 0 1 7 3 1 2 5 1 0 3 7 2 1 【样例输出】 9 6 8 8 题目解析 最小生成树简单算法 对于每一次问询,关注若干点后,我们需要按照最小生成树的方法生成n-1条边,此时关注点全部连通,然后求出其中的最大边

SAMSARA的博客 996

华为交换机、路由器配置静态路由实现不同网段通信

华为交换机、路由器配置静态路由实现不同网段通信。在主核心交换机上配置vlanif10 192.168.10.254/24,vlanif20 192.168.20.254/24,vlanif100 192.168.100.1/24,PC1:192.168.10.1能ping通PC2:192.168.20.1,也能ping通PC3:192.168.30.1,交换机和路由器使用静态路由。

星如雨落 6461

PaddleOCR全版本完整指南:从入门到精通,全面解析安装部署与高级应用

摘要 本文详细介绍了PaddleOCR的完整安装与使用指南。首先讲解了环境准备步骤,包括Python 3.11虚拟环境创建和PaddlePaddle框架的CPU/GPU版本安装。接着介绍了PaddleOCR库的安装方式,可选功能模块(文档解析、信息抽取、翻译等)及其依赖组。通过示例代码演示了PPStructureV3文档解析功能的基本用法,并提供了安装验证方法。最后针对常见问题(Windows中文用户名报错、模型下载问题)给出解决方案。文章为从入门到精通的PaddleOCR用户提供了全面的技术指导。

算法工程师 1366

蓝桥杯试题——灾后重建

蓝桥杯试题——灾后重建 #include<iostream> #include<cstring> int N, M, Q; int x; int C; int visited[5002]; int p[5002]; using namespace std; struct Map { int arc[5002][5002]; int vexnum; int arcnum; }; Map map; void Init() { for (int i = 0; i <

qq_46586095的博客 584

知识蒸馏⚗️ | YOLOv5知识蒸馏实战篇

YOLOv5知识蒸馏教程

Coding... 9361

洛谷 P1119 灾后重建 ( floyd) 题解

题目来源: https://www.luogu.org/problemnew/show/P1119 题目描述: 题目背景 BB地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响。但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车。换句话说,只有连接着两个重建完成的村庄的公路才能通车,只能到达重建完成的村庄。 题目描述 给出BB地区的村庄数NN,村庄编...

摇摇乐的博客 529

华为OD机试 - 机器人活动区域(Python/JS/C/C++ 双机位C卷 200分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。现有一个机器人,可放置于 M × N的网格中任意位置,每个网格包含一个非负整数编号。当相邻网格的数字编号差值的绝对值小于等于 1 时,机器人可在网格间移动问题:求机器人可活动的最大范围对应的网格点数目。说明:1)网格左上角坐标为 (0, 0),右

学Java,找哪吒 1434

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【普及+/提高】洛谷P1119 ——灾后重建

接下来 M 行,每行 3 个非负整数 i,j,w,w 不超过 10000,表示了有一条连接村庄 i 与村庄 j 的道路,长度为 w,保证 i=j,且对于任意一对村庄只会存在一条道路。很多人都是直接把这个算法背了下来,然后要求最短路时直接默写,没有考虑到这个算法的本质意义,而这个题目,正好考了这个算法的本质,如果只会背的话,遇见这题直接就GG。接下来 Q 行,每行 3 个非负整数 x,y,t,询问在第 t 天,从村庄 x 到村庄 y 的最短路径长度为多少,数据保证了 t 是不下降的。那么,如何进行中转呢?

yuyu130225的博客 1538

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

luogu P1119 灾后重建 题解(最短路)

题目链接: P1119 灾后重建 离noip还有54天然而蒟蒻的我连洛谷的试炼场都没有刷完(我太弱了)于是开始刷题。之后就刷到了这道题。 这是一道最短路的经典题,题目自己打开链接看好吧,我就不粘贴了谢谢(才不是因为我懒)。 对于这道题数组最好从000开始,因为村庄数是从000开始的。 这个题要询问是否两点是否联通(是否修好路了)和最短路。 由于道路在不断的修好所以不同时间的最短路也可...

阿嚏的博客 369

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

洛谷 P1119 灾后重建 理解Floyed算法

洛谷 P1119 灾后重建 理解Floyed算法 题解: 要理解Floyed算法的原理,每次取前k个点作为中转,不断更新。 不能硬背模板。 代码如下: #include<iostream> #include<algorithm> #include<stdio.h> #include<cmath> #include<queue> #incl...

化身孤岛的鲸o的博客 568

洛谷P1119灾后重建

今天做了这道题QwQ 昨天洛谷提交888,通过188 原以为这么吉利今天会有好事发生 结果,luogu积分达到了1191 哎,那九分就不能给补上啊??? 好了,废话就说到这里 https://www.luogu.org/problemnew/show/P1119 链接在上 题目背景 BB 地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响。但是在村庄重建...

L_Y_T020321的博客 703

【luogu1119】灾后重建[floyd]

P1119灾后重建 好像洛谷的题解都在强调floyd的含义 不能只是背到floyd然后就用 还要理解floyd的含义 f[i][j]:从i号顶点到j号顶点只经过前k号点的最短路程 然后还得有个优化 如果该点作为中转点计算过 那么就不用再走一遍 比较良心的是出题人是大小有顺序地输入 不加那个走过的判断 QAQ我还写错了一个地方 最终 1 #include<...

weixin_30555753的博客 189

洛谷P1119 灾后重建

P1119 灾后重建 题目链接-P1119 灾后重建 解题思路 floyd思想floyd思想floyd思想 folydfolydfolyd算法没什么说的,就是动态规划,通过枚举中继点来更新最短路 因为刚开始每个村庄之间并不是联通的,随着重建村庄才连接起两村庄间的道路,且每次都是询问第t天,从村庄x到村庄y的最短路径长度,所以我们可以边更新边输出 在开始需将每个村庄之间的距离都初始化为INF,...

Fiveneves的博客 313

灾后重建(洛谷P1119)

P1119 灾后重建 题目地址 对于我这种图论初学来说,这道题无疑是道好题,充分考察了Floyd算法的具体思想,运用了dp的思维来解决最短路,不停的用中间点来更新最短路,个人认为跟区间dp有点类似,总之学到了; 代码: #include<bits/stdc++.h> using namespace std; int ti[210]; int edge[210][210];//邻接矩阵存...

不知所云的博客 278

洛谷 P1119 灾后重建(Floyd)

https://www.luogu.com.cn/problem/P1119 思路 刚开始还感觉这用Floyd难道不会超吗,后来发现题目条件顺着下来给的 t 是不会减少的,然后经过这题对Floyd有了更好的理解,去枚举中转站。 代码 #include <bits/stdc++.h> using namespace std; const int N = 202; const int INF = 0x3f3f3f3f; int n, m, q; int t[N]; int dis[N][N];.

We have to be very hard to reach the top. 210

洛谷P1119灾后重建——Floyd

题目:https://www.luogu.org/problemnew/show/P1119 N很小,考虑用Floyd; 因为t已经排好序,所以逐个加点,Floyd更新即可; 这也给我们一个启发,如果t不是排好序的,也可以离线处理,排序再做。 代码如下: #include<iostream> #include<cstdio> #include&l...

aodan5477的博客 142

【题解】洛谷P1119 灾后重建

题目 洛谷P1119灾后重建 题解 由于询问数Q比较大,不可能每次询问都新建图,所以考虑离线(集中处理询问)。注意到村庄重建时间是不严格递增的,所以在时间t[i]之前,只有编号为0~i的村庄重建完。注意到村庄数n比较小,可以考虑floyd算法,这个算法可以求出任意两点间的最短路,同时,在动态规划过程中,floyd算法也解决了“若只经过编号为0~i的节点,求任意两点间的最短路径”这个子问题。所以,在执行floyd算法的同时,更新符合当前条件的询问的答案。 代码 #incl

zjgmartin的博客 294
上一篇: 【题解】P2921 在农场万圣节(tarjan)
下一篇: 【题解】洛谷P1552 牛的旅行(floyd)
Rem_Inory
博客等级 码龄8年 4粉丝 140原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值