CCF 行车路线(多维最短路,两种类型的道路)

CCF认证 行车路线 CCF认证行车路线行车路线原题连接 描述: 小明和小芳出去乡村玩,小明负责开车,小芳来导航。小芳将可能的道路分为大道和小道。大道比较好走,每走1公里小明会增加1的疲劳度。小道不好走,如果连续走小道,小明的疲劳值会快速增加,连续走s公里小明会增加s2的疲劳度。例如:有5个路口,1号路口到2号路口为小道,2号路口到3号路口为小道,3号路口到4号路口为大道,4号路口到5号路口为小道,相邻路口 阅读详情

题解

先用Floyd预处理各个点小道的距离,每个点有两个状态:从小道到达d1[u]和从大道到达d2[u]。转移方式为:
d1[u]:d2[v]+w; 大道到达的点+小道
d2[u]: d2[u]+w; 大道到达的点+大道
d2[u]: d1[v]+w; 小道到达的点+大道

为什么小道的点不能从小道到达的点+小道呢?
因为我们已经预处理过了,比如u->v->w,其中(u,v),(v,w)都是小道,u是大道到达的点,d[w] = d[v]+w;的话是不正确的,因为连续走了两条小道。所以,小道到达的点一定是从一个大道到达的点走一连串小道到达的。

#include <bits/stdc++.h>
using namespace std;
#define FOR0(a,b) for(int i = a; i < b; ++i)
#define FORE(a,b) for(int i = a; i <= b; ++i)
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 500+5;
const ll INF = 1e18;
int n,m;
ll g1[maxn][maxn],g2[maxn][maxn];
ll d1[maxn],d2[maxn];
int cnt[maxn], inq[maxn];
void spfa() {
	// memset(d1,INF,sizeof d1);
	// memset(d2,INF,sizeof d2);
	d1[1] = 0;
	d2[1] = 0;
	queue<int>que;
	que.push(1);
	inq[1] = true;
	// cnt[1] = 1;
	while(!que.empty()) {
		int u = que.front();
		que.pop();
		// cout << u << " " << d2[u]<<" "<<d1[u] << endl;
		inq[u] = false;
		for(int i = 1; i <= n; ++i) {
			if(g2[u][i] != INF) {
				if(d2[i] > d2[u]+g2[u][i]) {
					d2[i] = d2[u]+g2[u][i];
					if(!inq[i]) {
						inq[i] = true;
						que.push(i);
					}
				}
				if(d2[i] > d1[u]+g2[u][i]) {
					d2[i] = d1[u]+g2[u][i];
					if(!inq[i]) {
						inq[i] = true;
						que.push(i);
					}
				}
			}
			if(g1[u][i] != INF) {
				ll v = g1[u][i]*g1[u][i];
				// cout << v << endl;
				if(d1[i] > d2[u]+v) {
					d1[i] = d2[u]+v;
					if(!inq[i]) {
						inq[i] = true;
						que.push(i);
					}
				}
			}
		}
	}
	cout << min(d1[n],d2[n]) << endl;
}
int main() {
	// memset(g1,INF,sizeof g1);
	// memset(g2,INF,sizeof g2);
	scanf("%d%d", &n, &m);
	for(int i = 0; i <= n; ++i) {
		d1[i] = d2[i] = INF;
		for(int j = 0; j <= n; ++j) {
			g1[i][j] = g2[i][j] = INF;
		}
	}
	int t,a,b,c;
	for(int i = 0; i < m; ++i) {
		scanf("%d%d%d%d", &t, &a, &b, &c);
		if(t == 1 && g1[a][b] > c)
			g1[a][b] = g1[b][a] = c;
		else if(t == 0 && g2[a][b] > c)
			g2[a][b] = g2[b][a] = c;
	}
	
		for(int i = 1; i <= n; ++i) 
			for(int j = i+1; j <= n; ++j) 
				for(int k = 1; k <= n; ++k){
					if(k == i || j == k)
						continue;
					if(g1[i][j] > g1[i][k]+g1[k][j])
						g1[j][i] = g1[i][j] = g1[i][k]+g1[k][j];
				// cout << g1[i][j] << endl;
			}
	spfa();
	return 0;
}
华为OD机试2025C卷-双十一最大花费金额[100分](Java_Python3_C++_C语言_JsNode_Go)实现100%通过率 双十一最大花费金额 - 动态规划解法 摘要:本文介绍了华为OD机试中"双十一最大花费金额"问题的动态规划解法。该问题要求在给定N件商品价格和优惠券面额X的情况下,选择若干商品使总花费不超过X且尽可能大。核心解法采用布尔型动态规划数组,记录每个金额是否可被拼出。算法时间复杂度为O(N*X),空间复杂度为O(X)。通过倒序遍历避免重复选择同一商品,最后从X向下查找第一个可达金额作为答案。文中提供了C++和Java的实现代码,并解释了与经典0-1背包问题的关系。 关键点: 问题本质是0-1背包/子集和问题的变体 阅读详情

相关推荐

stata 代码实现熵值法计算 含常见问题解答

2.标准化①正向指标②负向指标。

m0_74825360的博客 1217

E. Paired Payment(多维最短路dijkstra)

https://codeforces.com/contest/1486/problem/E 题意: 给一张无向图,一次只能同时走两步,权值为两条边的边权和的平方。求1到其他每个点的最短距离。达不到就输出-1 思路: 拆点跑分层图也可以做。这里学习的是最短路dp的形式。原来的dijkstra最短路只更新最短距离,即dp[i] 这道题需要在原来的基础上多加dp的状态, 观察到这个边权很小,适合做dp的一维状态。 即dp[i][j][num]:从起点到x,上一条边的权值为j,且已经经过了num条边,

代码笔记本 527

【Codex Sandbox 与审批机制:小白也能看懂的实用教程】

这篇教程介绍了Codex工具中的沙盒(Sandbox)和审批(Approvals)机制,帮助用户安全高效地使用Codex协作。沙盒限制Codex访问范围,审批机制则控制敏感操作权限。文章详细讲解了五种常见模式:最安全的安全只读浏览、只读非交互、仓库内编辑、Auto预设和不推荐的YOLO模式。还提供了新手使用路径建议、配置示例和实战场景范式,包括如何测试沙盒行为、不同系统下的实现方式以及常见问题解答。最后附上速查清单,帮助用户快速选择合适的权限组合。

zsr154278963的博客 6706

导航中道路模型概念

道路是导航引擎及地图中基本概念。 目前在导航引擎中,道路是线性的,大部分的道路宽度的属性还没有,道路纯粹是线性模型。而目前的导航系统基本是以线段模型来拟合道路。 即两个端点及之间的线段。 而整个地图中道路的拓扑结构都是由这些线段构成,线段之间的交点就是shape point,这些点也可以看做是道路的分割点。 在接下来新一代导航系统中,道路模型增加了一个新的参数:曲率,这样使道路的拟合更平滑,

viewcode的专栏 1万+

数据分析—用户行为数据分析

一般价值用户(R高F高M低):用户处于购买活跃期,感兴趣的商品多,购买次数少 → 针对该部分客户,目的就是要让他们购买,所以可以和运营部门沟通,降低利润,给出有力折扣促进购买,进而转为重要价值用户。重要价值用户(R高F高M高)维护:用户处于购买活跃期,感兴趣的商品多,购买次数也多 → 针对兴趣产品,保持一定频率的触达,持续维护。

m0_74091312的博客 1419

树莓派4在Bookworm Raspbian系统下无法进入桌面模式(启动后出现彩色画面,然后一直黑屏,但是可以正常启动和ssh)

本文记录了这段比较坎坷的探索之路,由于你的问题不一定是我最终解决方案的,可能是前面探索路上试过的,所以建议按顺序看排除前置问题。 双十一又买了个树莓派 4B,插上之前树莓派 4B 的 TF 卡直接就能使用(毕竟是一样规格的)。但是由于用来连接硬盘的 USB 线是坏的,我以为是系统问题就进行了重装(所以坏掉的线还是直接扔了好)。 重新安装系统就装了最新的 2023-10-10 版本的 64 位的 Raspberry Pi OS,但是出现了一个问题: 启动后出现彩色画面,然后一直黑屏。

ZhongUncle的博客 3735

行政区划代码(道路要素)

行政区划代码

an13654067079的博客 500

SAP PP后台配置实战:从BOM到工艺路线的全流程解析

本文详细解析了SAP PP模块后台配置的全流程,从BOM到工艺路线的关键步骤与实战技巧。通过分享生产计划、工作中心能力计划等核心配置经验,帮助企业优化生产管理流程,提升SAP系统实施效率。特别针对BOM配置、工艺路线设置等常见问题提供解决方案。

weixin_29300931的博客 1010

CCF CSP——行车路线(行车路线)【Dijkstra算法】

注意数量级问题,答案要用long long 存储

qq_44408319的博客 1634

从AP到ADSP:高通8650 AudioReach中GSL-Passthru-GPR的数据通路剖析

本文深入剖析了高通骁龙8650平台AudioReach架构中,音频数据从应用处理器(AP)到音频数字信号处理器(ADSP)的完整传输路径。重点解析了GSL(Graph Service Layer)如何封装命令,并通过Passthru驱动与GPR(Generic Packet Router)协同工作,实现跨处理器的高效、异步数据交换,揭示了现代手机复杂音频系统背后的核心通信机制。

cherry的博客 536

华为云Stack 8.X 流量模型分析(一)

​ 当内部需要提供对外服务时(如对外发布Web网站),外部地址发起主动连接,由路由器或者防火墙上的网关接收这个连接,然后将连接转换到内部,此过程是由带有公网IP的网关替代内部服务来接收外部的连接,然后在内部做地址转换,此转换称为DNAT,主要用于内部服务对外发布。​ 内部地址要访问公网上的服务时(如Web访问),内部地址会主动发起连接,由路由器或者防火墙上的网关对内部地址做个地址转换,将内部地址的私有IP转换为公网的公有IP,网关的这个地址转换称为SNAT,主要用于内部共享IP访问外部。

Ciyaso的博客 3244

link,segment等几个地理概念

在空间信息领域,有两个概念,一个是link 一个是segment,理解这两个概念,先要理解node和joint这两个概念。一段路在地图上看,出现与其他路相连接的地方(十字路口,丁字路口)就是一个node,而图上两个node之间的无数构成路段图形形状的连接点就叫joint。两个node之间的一段叫一个link,两个joint之间的一段叫segment。所以segment不能说成链路,一个segment并不构成连通性,它只是一个link内部的细节部分。 ...

woxincd的专栏 2303

老款 NUC 复活计划:装 Ubuntu 部署 OpenClaw 本地 AI

老款 NUC 变身本地 AI 服务器指南 本文详细介绍了如何将老旧华硕 NUC 设备改造为本地 AI 服务器。主要内容包括: 硬件评估:列出老款 NUC 的最低配置要求(i3 6代/8GB内存/256GB SSD),并提供兼容性检查命令和性能预期表 系统准备:指导备份数据、下载 Ubuntu 22.04 LTS 和制作启动盘的方法(Windows/Linux双平台) 安装流程:从 BIOS 设置到 Ubuntu 安装的完整步骤,包括推荐的分区方案 系统优化:禁用不必要的服务、内核参数调优、Swap 配置和

博客 7607

以node / link文件表征的道路网络-----基于南京公路公开数据做路径规划(下)------dijkstra算法的一些简单花样

东北饺子要配卤猪蹄和凉拌土豆丝

吃饱了写的博客 327

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

以node / link文件表征的道路网络 ----在QGIS里看见最基础的路网

在NANKING的东北一角, 我和绕越高速, 都在奔跑。

吃饱了写的博客 811

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

道路类型解释

(高速公路连接线):这些道路是高速公路与其他道路(如主干道、次干道或主要道路)之间的连接段,可能具有较低的限速或特殊的交通规则。(主要道路):在一些分类系统中,主要道路可能介于主干道和次干道之间,或者是一个更宽泛的术语,用于描述城市中重要的交通路线。(各类道路的连接线):这些是指连接主要道路、主干道、次干道和三级道路之间的短距离路段,可能具有特定的交通规则或限速。它们的通行能力较低,可能只有一到两个车道。(住宅区道路):住宅区道路是专为住宅区内部设计的道路,通常限速较低,交通量较小,以方便居民的日常出行。

weixin_45135154的博客 3857

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

以node / link文件表征的道路网络 ----QGIS在本技术路线中的作用 + 筛选高速公路数据

在小小的QGIS里挖呀挖呀挖

吃饱了写的博客 654

CCF 2017年12月第4题-行车路线

2017年12月第4题-行车路线这一题是最短路问题,稍微有些变形,因为需要处理大路和小路这两种情况,其中小路的增长并不是线性的,所以需要对小路进行一遍预处理。思路是使用弗洛伊德算法和迪杰斯特拉结合。用弗洛伊德算法处理小路,用迪杰斯特拉算法处理总的距离。但不得不说这一题的测试数据十分的弱,即使是只使用迪杰斯特拉算法也可以过100%的测试用例。先贴一个第一遍的错误代码。#include&lt;iost...

cryanxin的博客 2828

2017模拟赛 密室(多维最短路)

二维最短路记录 表示当前状态的最小情况 注意初始情况代码#include<cstdio> #include<algorithm> #include<cmath> #include<iostream> #include<cstring> #include<queue> using namespace std; #define maxn 7001 #define inf 1e9 int n,m,k;

nkliuorz的博客 375

多维最短路。

注意点: 看代码注释#include <cstdio> #include <cstring> #include <string> #include <algorithm> #include <queue> #include <map> #include <cmath> #include <iostream> #include <set> #include <vector> #define INF

__water 406

BZOJ P2763 [JLOI2011]飞行路线【多维最短路】

同https://blog.youkuaiyun.com/yanzhenhuai/article/details/82749203 #include &lt;queue&gt; #include &lt;cmath&gt; #include &lt;cstdio&gt; #include &lt;cstring&gt; #include &lt;iostream&gt; #include &lt;algori...

Yucohny 374

OpenDrive格式高精度地图详细解析及其使用(2.Road道路元素和Lane车道元素)

大家过年好!距离上次更新过去了很久的时间,是因为12月份的时候身体出现了一点小状况,在碰上今年一月份的时候事情有点多,更新就这么一直耽误了,好在这几天在家可以安心码字,把之前没更新完的更新完,废话不多说,我们接下来直接上干货。 1.道路元素(Road) 准确的来说,不应该把道路元素(Road)和车道元素(Lane)分开来说,因为车道元素是包含在道路中的,车道集合(lanes)是道路的一个子元素,每个道路必须有一条以上的,但是我觉得分开说能讲的更好,所以就这么分开说了。 Road的集合Roads是opendr

qq_39767850的博客 4652

专题·最短路【including Dijkstra, SPFA,Floyd,传递闭包,二维最短路,分层图最短路,最短路计数……

DIj算法,堆优化版本,线段树优化版本; SPFA算法,Floyd算法,传递闭包; 如标题的各种最短路的应用

樱狸✨愿携清风归来处 1万+

1486E - Paired Payment(多维最短路)

给定一个不保证连通的无向图,每次走都必须连着走两条路( a, b, ca,b,c 三个点,则只能走 ab—bcab—bc 到 cc ,或者 ac—cbac—cb 到 bb ),且所花费的金钱为两条路的边权和的平方( (w_{ab} + w_{bc})^2(w ab ​ +w bc ​ ) 2 )。问从第一个点到其他所有点花费的最小金额各是多少?没有路径输出-1。

tcy今天长胖了吗的博客 348

城市间紧急救援-多维最短路

#include <cstdio> #include <cstring> #include <algorithm> #include <queue> #define INF 0x3f3f3f3f using namespace std; const int N=505; int n,m,s,d; int ren[N]; int ma[N][N]; int cnt[N]; int vis[N]; in

__water 535

[POJ 3635] Full Tank? (多维最短路)

题目链接:http://poj.org/problem?id=3635 题目大意: 在一个国家有N座城市,有M条道路连接N座城市,每条道路有长度d,一单位长度耗一单位油。在每座城市有加油站,一单位价格为pi。 现在有q个询问,每个询问代表一辆车从城市st到城市ed的最少花费,其中每辆车的邮箱最大为c。 解题思路: 将每座城市拆分为c个状态,要么在这里加一单位油,要么从该点走向其他城市。用

SIOFive的专栏 1209
上一篇: CCF URL映射(大模拟)
下一篇: P1972 树状数组求区间种类数
Link_Ray
博客等级 码龄9年 44粉丝 156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值