100276. 最短路径中的边

news/2024/9/25 23:20:56/
https://leetcode.cn/problems/find-edges-in-shortest-paths/

思路

从0点到各个点的距离,
然后dfs扩展就行了,只要链接上这个边,仍能等于最小的距离,就说明结果是最小路径上的边。

class Solution {
public:vector<bool> findAnswer(int n, vector<vector<int>>& edges) {vector<vector<tuple<int,int, int>>> maps(n);for(int i=0;i<edges.size();i++){auto it = edges[i];maps[it[0]].emplace_back(it[1], it[2], i);maps[it[1]].emplace_back(it[0], it[2], i);}// 使用dj+堆优化进行搜索全部的结果priority_queue<pair<long long, int> ,vector<pair<long long, int>>, greater<pair<long long,int>> > que;vector<int> vis(n , 0);vector<long long> dis(n, INT_MAX);dis[0] = 0;que.emplace(0, 0);// 0距离0点while(que.size()){auto it = que.top();que.pop();int min_pos = it.second;if(vis[min_pos]) continue;vis[min_pos] = 1;for(auto &[y, w, _]: maps[min_pos]){if(!vis[y] and dis[y]>dis[min_pos]+w){dis[y]=dis[min_pos]+w;que.emplace(dis[y], y);}}}vector<bool > ans(edges.size(), false);if(dis[n-1] == INT_MAX) return ans;// 否则就从n-1点进行dfs扩展vis.clear();vis.resize(n, 0);function<void(int )> dfs = [&](int pos){if(pos<0) return;vis[pos] = 1;for(auto& [y,w,p]:maps[pos]){if(dis[y]+w!=dis[pos]) continue;ans[p] = true;if(!vis[y])dfs(y);}};dfs(n-1);return ans;}
};

http://www.ppmy.cn/news/1428692.html

相关文章

批量插入10w数据方法对比

环境准备(mysql5.7) CREATE TABLE user (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 唯一id,user_id bigint(10) DEFAULT NULL COMMENT 用户id-uuid,user_name varchar(100) NOT NULL COMMENT 用户名,user_age bigint(10) DEFAULT NULL COMMENT 用户年龄,create_time time…

C++ - 文件流fstream

C 文件流是指在C编程中使用的用于文件输入输出操作的机制。这种机制允许程序员以类似于流的方式读取和写入文件数据。在C中&#xff0c;文件流通常使用<fstream>头文件提供的类来实现。 常用的文件流类包括&#xff1a; 1. std::ofstream&#xff1a;用于向文件中写入数…

uni-app项目引入阿里巴巴矢量图标库

uni-app项目引入阿里巴巴矢量图标库 1.下载图标库中的symbol下载至本地 2.解压文件夹并放入项目中 我这里放入的位置是src/static/icon目录下 3.修改文件指向路径为相对路径 即在路径iconfont前面添加斜杠 4.app.vue的style中引入 import static/icon/iconfont.css; 5…

适合生产制造企业用的ERP系统有哪些?

适合生产制造企业用的ERP系统有哪些&#xff1f; 想选择适合生产制造企业的ERP&#xff0c;首先了解市面上有哪些ERP系统 市面上的ERP系统主要分为三大类&#xff1a; 1、垂直领域的ERP系统&#xff1a;这些系统是针对特定行业或垂直市场定制的ERP解决方案&#xff0c;通常具…

深入解析Tomcat的工作流程

tomcat解析 Tomcat是一个广泛使用的开源Servlet容器&#xff0c;用于托管Java Web应用程序。理解Tomcat的工作流程对于开发人员和系统管理员来说是非常重要的。本文将深入探讨Tomcat的工作原理&#xff0c;包括请求处理、线程池管理、类加载、以及与Web服务器之间的通信。 ###…

C# lock

在C#中&#xff0c;lock是一个关键字&#xff0c;用于实现同步&#xff0c;确保当一个线程正在执行某个代码块时&#xff0c;其他线程将等待直到该线程完成该代码块的执行。这是通过在代码块周围放置一个锁来实现的&#xff0c;这个锁是一个独特的对象&#xff0c;其他线程在尝…

JavaCard学习笔记: CAP Component 之 Class Component

文章目录 整体结构tag和size字段signature_pool_length和signature_pooltype_descriptor结构导入类型编码导入项签名示例导入类导入数组导入远程方法 interfaces[]interface_info结构flagsinteface_countsuperinterfacesinterface_name class_info_compact classes[]结构flagsi…

配置静态路由实现全网互通

1、实验环境 如图下所示&#xff0c;三台路由器R1&#xff0e;R2&#xff0c;R3两两互连&#xff0c;每台路由器上都配置了Loopback地址模拟网络环境。 2、需求描述 需要在三台路由器上配置静态路由&#xff0c;以实现各网段之间的互通。 若要实现全网互通,必须明确如下两个问…