Codeforces Round 933 (Div. 3)G. Rudolf and Subway 虚点辅佐的dijkstra,用的链式前向星

Problem - G - Codeforces

推荐视频题解:G_哔哩哔哩_bilibili

思路:

先不管同一个线路上的,就正常建边,这样点距都是1.

然后虚点就是该线路的每个点都连的点。

到虚点的边权是1,表示我们坐这趟线路。

然后这个虚点能去的点的边权都是0.

链式前向星要开3倍的,分别是(都是双向,所以nxt要开6*maxn)

1.车站间的

2.每个车站与虚点相连的

3.每个虚点连的所有车站

参考代码:

const int maxn = 2e5 + 5;//链式前向星 <邻接表>
int tot = 0;//total 下标
int head[maxn*3];//这个邻接表的头的位置
int nxt[maxn * 6];//下一个点的下标
int node[maxn * 6];//每个点的编号
int val[maxn * 6];//边权
inline void add(int a, int b, int t = 1)
{tot++;nxt[tot] = head[a];head[a] = tot;node[tot] = b;val[tot] = t;//a到b的权值
}int b, e;
int ans;
int color[maxn];
int ctot = 0;int tmpdis = 1;
struct dis_node//放堆里面比长度,但是想知道端点
{int dis;int next;bool operator < (const dis_node& a){return dis < a.dis;}dis_node(int d, int n){dis = d; next = n;}
};
class cmp
{
public:bool operator()(dis_node a, dis_node b){return a.dis > b.dis;//}
};
void dijkstr(vector<int>& dij,  int ori, int n)
{priority_queue<dis_node, vector<dis_node>, cmp>heap;vector<int>barr(n+2);int cur = ori;while (1){//该次点所有可走的//for (auto next : arr[cur])//{//    if (next == cur)continue;//    //next就是下一个点(邻接表//    if (dij[next] == 0)//        dij[next] = dij[cur] + tmpdis;//    else//        dij[next] = min(dij[next], dij[cur] + tmpdis);//    heap.push(dis_node(dij[next], next));//}for (int i = head[cur]; i; i = nxt[i]){if (node[nxt[i]] == cur)continue;if(dij[node[i]] == 0)dij[node[i]] = dij[cur] + val[i];elsedij[node[i]] = min(dij[node[i]], dij[cur] + val[i]);heap.push(dis_node( dij[node[i]], node[i] ));}//该点已使用,已最短,无需再抵达barr[cur] = 1;//最短路中找最短,同时可抵达的while (heap.size()){if (barr[heap.top().next] == 0)break;heap.pop();}if (heap.size() == 0)break;cur = heap.top().next;heap.pop();}
}void solve()
{int n, m;cin >> n >> m;ans = n;memset(color, 0, sizeof(int)*(ctot+1));tot = ctot = 0;memset(head, 0, sizeof(int)* (n + 1) * 2);map<int, int>cpos;for (int i = 0; i < m; i++){int u, v, c;cin >> u >> v >> c;add(u, v,1);add(v, u,1);if (color[cpos[c]] == 0){ctot++;cpos[c] = ctot;color[ctot] = ctot + n;}add(color[cpos[c]], u, 0);add(u, color[cpos[c]], 1);add(color[cpos[c]], v, 0);add(v, color[cpos[c]], 1);}cin >> b >> e;if (b == e){cout << 0 << endl;return;}vector<int>dij(n+m+2);dijkstr(dij,b,n+m+2);cout << dij[e] << endl;
}

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

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

相关文章

C语言中strlen函数的实现

C语言中strlen函数的实现 为了便于和strlen函数区别&#xff0c;以下命令为_strlen。 描述&#xff1a;实现strlen&#xff0c;获取字符串的长度&#xff0c;函数原型如下&#xff1a; size_t strlen(const char *str);_strlen实现&#xff1a; size_t _strlen(const char*…

在flutter中添加video_player【视频播放插件】

添加插件依赖 dependencies:video_player: ^2.8.3插件的用途 在Flutter框架中&#xff0c;video_player 插件是一个专门用于播放视频的插件。它允许开发者在Flutter应用中嵌入视频播放器&#xff0c;并提供了一系列功能来控制和定制视频播放体验。这个插件对于需要在应用中展…

Django - 视图和模板

视图 视图 - 是具体的业务代码 在 app 下的 views.py 文件中编写代码 from django.http import HttpResponsedef index(request):return HttpResponse("这里是我的站点")为了调用该视图&#xff0c;我们还需要编写urlconf&#xff0c;也就是路由配置。在polls目录中…

Vite 项目中环境变量的配置和使用

Vite 项目中环境变量的声明 我们要在 Vite 项目中进行环境变量的声明&#xff0c;那么需要在项目的根目录下&#xff0c;新建 .env.[mode] 文件用于声明环境变量&#xff0c;如&#xff1a; .env.test 文件用于测试环境下项目全局变量的声明.env.dev 文件用于开发环境下项目全…

Scikit-Learn K均值聚类

Scikit-Learn K均值聚类 1、K均值聚类1.1、K均值聚类及原理1.2、K均值聚类的优缺点1.3、聚类与分类的区别2、Scikit-Learn K均值聚类2.1、Scikit-Learn K均值聚类API2.2、K均值聚类初体验2.3、K均值聚类案例1、K均值聚类 K-均值(K-Means)是一种聚类算法,属于无监督学习。K-M…

OpenFOAM学习笔记

OpenFOAM 计算流体力学&#xff1a;用计算机求解流体控制方程&#xff0c;来模拟真实情况下&#xff0c;流体的流动状态OpenFOAM的离散方法&#xff1a;有限体积法&#xff0c;将整个空间划分成若干个控制体OpenFOAM使用的网格系统&#xff1a;同位网格&#xff08;Collocated…

nvm保姆级安装使用教程

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 开发环境篇 ✨特色专栏&#xff1a; M…

python相机校准

文章目录 张正友标定法角点检测标定去畸变 张正友标定法 相片是三维世界在二维平面上的投射&#xff0c;故而其深度信息是损失掉了的。但是&#xff0c;如果把拍照看作理想的小孔成像过程&#xff0c;那么相片中的每个像素&#xff0c;都将通过一个锥体与世界中真实的点一一对…

MongoDB聚合运算符:$median

文章目录 语法参数字段使用类型操作计算注意事项数组处理窗口函数 举例$median作为累加器在 p r o j e c t 阶段使用 project阶段使用 project阶段使用median在$setWindowField阶段使用$median $median聚合运算符以标量值返回中位数的近似值&#xff0c;即第50百分位数。$media…

常见的常见免费开源绘图工具对比 draw.io/Excalidraw/Lucidchart/yEd Graph Editor/Dia/

拓展阅读 常见免费开源绘图工具 OmniGraffle 创建精确、美观图形的工具 UML-架构图入门介绍 starUML UML 绘制工具 starUML 入门介绍 PlantUML 是绘制 uml 的一个开源项目 UML 等常见图绘制工具 绘图工具 draw.io / diagrams.net 免费在线图表编辑器 绘图工具 excalidr…

spa、vue、elementUi

spa (single page application). 动态重写当前页面而非从服务器重新加载整个新页面。使应用程序更像一个桌面应用程序。所有的html、javascript、css通过单个页面检索加载资源。前端页面使用ajax与后端通信。一个项目只有一个html页面。所有的页面跳转都通过路由导航。 vue可用…

【OpenCV进阶】图像中添加中文字幕

OpenCV中的putText函数可以在图像上添加一些你想要的信息&#xff0c;但是该函数只能添加英文字母或数字&#xff0c;无法添加中文字幕。函数原型如下&#xff1a; CV_EXPORTS_W void putText( InputOutputArray img, const String& text, Point org,int fontFace, double…

XSS分类

简介 XSS全称为Cross Site Scripting&#xff0c;为了和CSS分开简写为XSS&#xff0c;中文名为跨站脚本。该漏洞发生在用户端&#xff0c;是指在渲染过程中发生了不在预期过程中的JavaScript代码执行。XSS通常被用于获取Cookie、以受攻击者的身份进行操作等行为。 反射型XSS …

云数据库AWS Aurora(一)

背景 Amazon Aurora 是Amazon Web Services (AWS) 提供的一种关系数据库服务&#xff0c;它兼容并提供与MySQL和PostgreSQL相同的API。Aurora设计为云环境中的商业数据库&#xff0c;具备高性能、高可用性、低成本等特性。 AWS一些组件定义 首先介绍下AWS一些组件。 EC2&am…

Swift:在 Win10 上编程入门

访问 https://swift.org/download/ 找到 Windows 10&#xff1a;x86_64 下载 swift-5.10-RELEASE-windows10.exe 大约490MB 建议安装在 D:\Swift\ &#xff0c;安装后大约占2.56GB 官网文档&#xff1a;https://www.swift.org/documentation/ 中文教程&#xff1a;The swift…

C++之双向链表与哈希链表用法区别实例(二百六十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Unity常用性能优化

DrawCall&#xff1a;CPU向GPU发送渲染命令的过程。 批次&#xff1a;批次是指在一次渲染帧中提交的DrawCall数量。 合批&#xff1a;即批量渲染&#xff0c;合批是一种优化技术&#xff0c;通过将多个需要渲染的物体合并为一个或少数几个DrawCall。 静态合批&#xff1a;对…

Streamlit 构建大语言模型 (LLM) web 界面

文章目录 Streamlit 构建大语言模型 (LLM) web 界面选择Streamlit的原因原理流程streamlit布局示例代码聊天机器人示例代码&#xff08;简化版&#xff09; Streamlit在ChatGLM3-6B中的应用 Streamlit 构建大语言模型 (LLM) web 界面 选择Streamlit的原因 易用性&#xff1a;S…

Cisco Unified Communications Manager (CallManager) 15.0 SU1 - 统一通信与协作

Cisco Unified Communications Manager (CallManager) 15.0 SU1 - 统一通信与协作 思科统一通信管理器 (CallManager) 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-ucm-15/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;…

基于开源软件构建存储解决方案的思考

近来看了一些IBM的存储产品的资料&#xff0c;有一些收获。 依据存储软件和搭配硬件&#xff0c;IBM存储产品的组合&#xff0c;大致分类如下&#xff1a; 自研存储软件&#xff0c;搭配自研专有硬件自研存储软件&#xff0c;搭配通用服务器硬件&#xff0c;比如IBM Storage S…