G - Road Blocked 2

news2024/10/21 12:40:57

G - Road Blocked 2

思路

只有当一条边是从 1 1 1 n n n的所有最短路构成的图的桥时,去掉这条边,最短路才会变大

所以就可以用最短路加tarjan解决这道题了

怎么判断一条边是否可以构成最短路呢,比如求 1 1 1 n n n的最短路,分别求出dist1(源点为1)和distn(源点为n),当一条边(端点分别为a,b,边长为w)包含再最短路之中时,它满足如下条件

    dist1[n]=dist1[a]+w+distn[b]||dist1[n]=distn[a]+w+dist1[b]

当然还有其它方法,我写的代码就是其他方法,只是上面的方法更简单罢了

代码

struct Edge{
	int a,b,c;
};

void solve() {
	int n,m;
	cin>>n>>m;
	vector<vector<pii>> g(n+1);
	vector<Edge> es(m+1);
	for(int i=1;i<=m;i++){
		int a,b,c;
		cin>>a>>b>>c;
		es[i]={a,b,c};
		g[a].push_back({b,i}),g[b].push_back({a,i});
	}
	vector<bool> st(n+1);
	vector<ll> dist(n+1,1ll<<60);
	priority_queue<pll,vector<pll>,greater<pll>> q;
	dist[1]=0;
	q.push({dist[1],1});

	vector<vector<pii>> pas(n+1);

	while(q.size()){
		auto [dis,ver]=q.top();
		q.pop();
		if(st[ver]) continue;
		st[ver]=true;
		for(auto [y,id]:g[ver]){
			int w=es[id].c;
			if(dist[y]>dis+w){
				pas[y].clear();
				pas[y].push_back({ver,id});
				dist[y]=dis+w;
				q.push({dist[y],y}); 
			}
			else if(dist[y]==dis+w){
				pas[y].push_back({ver,id});
			}
		}
	}
	vector<bool> st1(n+1);
	vector<vector<pii>> fg(n+1);
	auto dfs=[&](auto && self,int u)->void{
		if(st1[u]) return;
		st1[u]=true;
		for(auto [ver,id]:pas[u]){
			fg[u].push_back({ver,id}),fg[ver].push_back({u,id});
			self(self,ver);
		}
	};
	dfs(dfs,n);
	vector<int> dfn(n+1),low(n+1);
	vector<bool> fst(m+1);
	int timestamp=0;
	auto tarjan=[&](auto && self,int u,int fa)->void{
		dfn[u]=low[u]=++timestamp;
		for(auto [y,id]:fg[u]){
			if(!dfn[y]){
				self(self,y,u);
				low[u]=min(low[u],low[y]);
				if(low[y]>dfn[u]){
					fst[id]=true;
				}
			}
			else if(y!=fa){
				low[u]=min(low[u],dfn[y]);
			}
		}
	};
	tarjan(tarjan,1,0);
	for(int i=1;i<=m;i++){
		cout<<(fst[i]?"Yes":"No")<<endl;
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2220029.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【专题】计算机网络之物理层

计算机网络体系结构&#xff1a; 1. 物理层的基本概念 物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流&#xff0c;而不是指具体的传输媒体。 作用&#xff1a;尽可能屏蔽掉不同传输媒体和通信手段的差异。 用于物理层的协议也常称为物理层规程 (procedu…

js.矩阵置零

链接&#xff1a;73. 矩阵置零 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],…

如何使用Java语言调用API数据

在当今的数据驱动世界中&#xff0c;API&#xff08;应用程序编程接口&#xff09;成为了连接不同服务和数据源的桥梁。无论是社交媒体数据、金融市场信息还是地理位置服务&#xff0c;API都能提供一种便捷的方式来获取这些数据。Java&#xff0c;作为最受欢迎的编程语言之一&a…

无mac电脑在苹果开发者上传构建版本

我们登录苹果开发者网站的后台&#xff0c;进入app store后&#xff0c;发现上架的页面需要上传一个构建版本。 这个构建版本的意思就是我们的应用二进制文件&#xff0c;是上架最重要的文件。但是在苹果开发者后台是无法直接上传这个文件的&#xff0c;它提示我们可以使用xco…

VSCODE c++不能自动补全的问题

最近安装了vscode&#xff0c;配置了C/C扩展&#xff0c;也按照网上说的配置了头文件路径 我发现有部分头文件是没办法解析的&#xff0c;只要包含这些头文件中的一个或者多个&#xff0c;就没有代码高亮和代码自动补全了&#xff0c;确定路径配置是没问题的&#xff0c;因为鼠…

Caffeine Cache解析(一):接口设计与TinyLFU

Caffeine is a high performance Java caching library providing a near optimal hit rate. 自动加载value, 支持异步加载基于size的eviction&#xff1a;frequency and recency基于时间的过期策略&#xff1a;last access or last write异步更新valuekey支持weak referenceva…

RK3588部署及其RKNPU工具链使用学习

文章目录 RKNPU 推理框架推理软件框架RKNPU 硬件层&#xff1a;RKNPU 驱动层&#xff1a;RKNPU 应用层 RKNN 模型RKNN 的工具链介绍RKNN 软件栈整体介绍RKNN-Toolkit2 功能介绍RKNPU2-SDK总结 开发环境搭建PC 端采用 虚拟机上的 Ubunt20.04 系统安装 anconda通过 conda 创建虚拟…

机器学习“捷径”:自动特征工程全面解析

引言 在机器学习项目中&#xff0c;特征工程是影响模型性能的关键步骤。它通过从原始数据中提取出更有用的特征&#xff0c;帮助模型更好地捕捉数据中的模式。然而&#xff0c;传统的特征工程过程往往需要大量的领域知识和实验调整&#xff0c;是一项耗时费力的工作。 近年来…

关于modbus与HMI车载侧屏通信的错误机制处理

目录 1.关于6个人机交互功能按钮逻辑图设计 2.错误处理机制 1.关于6个人机交互功能按钮逻辑图设计 初次的设计想法是按钮亮表示大家能按&#xff0c;但要是想在按一次&#xff0c;发送有效数据&#xff0c;就得先按亮&#xff0c;在按灭。这里以上料区为例&#xff0c;其它区…

Midjourney中文版:创意无界,绘梦成真

在数字艺术的浩瀚宇宙中&#xff0c;Midjourney中文版如同一颗璀璨的新星&#xff0c;以其独特的魅力和无限可能&#xff0c;引领着每一位创作者探索创意的无限边界。作为专为国内用户打造的AI绘画工具&#xff0c;Midjourney中文版不仅继承了原版的核心优势&#xff0c;更在本…

基于cloudreve(Docker应用)搭建网盘服务,用于目录的分享和在线预览。

文章目录 I 基于cloudreve(Docker应用)搭建网盘服务安装主要功能设置角色最大容量II 知识扩展:网盘类的文件预览需求背景: iOS可以直接预览PDF等常见格式文件,但是Android浏览器需要先下载文件,才能查看文件内容,因此需要搭建支持目录的分享和在线预览的MinIO文件服务提供…

【Redis】Zset类型常用命令

文章目录 一. Zset有序集合简介.二. 添加元素相关命令.2.1 向有序集合中添加元素(zadd) 三. 查询元素相关操作.3.1 查询有序集合中的元素个数( zcard zcount)3.2 查询指定区间内的元素(zrange zrevrange zrangebyscore)3.3 查询有序集合中指定成员的排名(zrank zrevrank )3.4 查…

AI大模型学习路线路径,巨详细!

大模型技术已经成为推动人工智能发展的关键力量。无论你是初学者还是有经验的开发者&#xff0c;想要掌握大模型应用&#xff0c;都需要遵循一定的学习路线。 从核心技术解析到模型微调与私有化部署&#xff0c;逐步深入大模型应用的世界。 这份学习路线图详细的介绍了那年每…

规划控制复现:Apollo LQR横向控制(算法原理推导与流程)

本文在前文已经搭建好的规划控制验证平台中进行LQR算法的复现&#xff1a; 1.车辆动力学建模 汽车轨迹跟踪误差模型示意图如下&#xff1a; 为车辆横向速度,为车辆纵向速度;和 分别为质心到前、 后轴的距离 ; 为车辆的横 摆角 ; 和 分别为车辆前 、 后轮的侧偏角。并设车辆…

【C++】哈希表的模拟实现

目录 一、闭散列&#xff08;开放定址定法&#xff09; 1、哈希表的结构&#xff1a; 2、哈希表的插入&#xff1a; 3、哈希表的查找&#xff1a; 4、哈希表的删除&#xff1a; 二、开散列&#xff08;哈希桶&#xff09; 1、哈希表的结构&#xff1a; 2、构造与析构&a…

若依前后分离版集成积木报表进行token传递

若依分离板集成积木报表就不说了需要的请移步&#xff1a;若依前后分离版集成积木报表-CSDN博客 考虑到前端摸鱼不干活,所以一般都是前后端都干&#xff0c;我这里前后端都搞上&#xff0c;你们直接抄&#xff0c;抄完接着去摸鱼&#xff0c;代码不美观&#xff0c;轻喷 一、…

【JavaEE】【多线程】synchronized和死锁

目录 一、synchronized详解1.1 互斥1.2 可重入 二、死锁2.1 死锁成因2.2 避免死锁 一、synchronized详解 1.1 互斥 synchronized 会起到互斥效果, 某个线程执行到某个对象的 synchronized 中时, 其他线程如果也执行到 同一个对象 synchronized 就会阻塞等待. 语法&#xff1…

AI时代程序员何去何从?提升自我还是被淘汰出局!

AI 在编程界的使用变得越来越普遍了。随着 ChatGPT 的横空出世&#xff0c;各种大语言模型如雨后春笋不断出现。国外如谷歌 Bard、Anthropic 的 Claude&#xff0c;国内如百度文心一言、阿里通义千问、讯飞星火认知大模型、昆仑万维天工大模型等。 想想看&#xff0c;以前得花好…

支持国密算法的数字证书-国密SSL证书详解

在互联网中&#xff0c;数字证书作为标志通讯各方身份信息的数字认证而存在&#xff0c;常见的数字证书大都采用国际算法&#xff0c;比如RSA算法、ECC算法、SHA2算法等。随着我国加强网络安全技术自主可控的大趋势&#xff0c;也出现了支持国密算法的数字证书-国密SSL证书。那…

【网络安全】缓存欺骗问题之查看个人资料接口

未经许可,不得转载。 文章目录 正文正文 目标网站 target.com,查看个人资料页面时,API 端点为/get_user,完整的 URL 是 https://target.com/web-api/v1/get_user?timestamp=123456(其中 timestamp 是一个易受攻击的参数)。 我注意到响应中有一个 cf-cache-status= MISS…