HDU4725 - The Shortest Path in Nya Graph (Dijstra + 建图)

Springboot信息泄露以及heapdump的利用 努力是为了不平庸~安全有些时候是枯燥的,这一次,让我们先人一步,趣学渗透! 阅读详情

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=4725


题目大意:

现在有N个节点,编号从1到N。有M条权值为Ci无向边,链接着两个节点。
新加入了一个条件,每个节点在一个层内,假设在 x 层,那么在 x 层内的节点可以直接到达 x + 1 层或 x -1 层的任意节点,花费为 C 。

现在求从 1 到 N 的最短路。


解题过程:

比赛的时候没做出来,现在才开始补题,当时觉得挺难的,没想到拆点重新建图。想通了就觉得挺简单了,然后处理下细节,不过这个题卡 SPFA 有点坑。


题目分析:

对于每一层,加入两个点,一个入点,一个出点。入点和出点和这一层里的所有点连一条边,并且权值为0 , 然后每一个出点和相邻的两层的入点相连。剩下的就是普通的最短路了。

关于为什么要建一个入点一个出点而不是只加入一个点,是为了防止同一层的点互相移动,这样同一层里的点的最短距离都变成 0 了。


AC代码:

#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;

const int MAX = 312345, INF = 0x3f3f3f3f;

int N, M, C;

vector<pair<int, int> > edge[MAX];
int vis[MAX], dist[MAX];

int dijstra() {
    //普通的dijstra求最短路
    memset(dist, INF, sizeof(dist));
    priority_queue<pair<int, int> > q;
    q.push(make_pair(0, 1));
    dist[1] = 0;
    while (!q.empty()) {
        int u = q.top().second;
        q.pop();
        for (int i = 0; i < edge[u].size(); i++) {
            int v = edge[u][i].first;
            int w = edge[u][i].second;
            if (dist[v] > dist[u] + w) {
                dist[v] = dist[u] + w;
                q.push(make_pair(-dist[v], v));
            }
        }
    }
    return dist[N];
}

int main() {
    int T, cases = 0;
    scanf("%d", &T);
    while (T--) {

        for (int i = 0; i <= N*3; i++) {
            edge[i].clear();
            vis[i] = 0;
        }

        scanf("%d %d %d", &N, &M, &C);
        for (int i = 1; i <= N; i++) {
            int t;
            scanf("%d", &t);
            vis[t] = 1;
            //这里 t*2-1+N 代表第 t 层的入点, t*2+N 代表出点
            edge[t*2-1+N].push_back(make_pair(i, 0));
            edge[i].push_back(make_pair(t*2+N, 0));
        }

        for (int i = 0; i < M; i++) {
            int u, v, w;
            scanf("%d %d %d", &u, &v, &w);
            edge[u].push_back(make_pair(v, w));
            edge[v].push_back(make_pair(u, w));
        }

        for (int i = 1; i <= N; i++) {
            int u = N + i*2;

            //当前层的出点与相邻层的入点建边
            if (i > 1) {
                int v = u-3;
                edge[u].push_back(make_pair(v, C));
            }
            if (i < N) {
                int v = u+1;
                edge[u].push_back(make_pair(v, C));
            }
        }

        int ans = dijstra();
        printf("Case #%d: %d\n", ++cases, ans == INF? -1:ans);
    }
}
YOLOv11 改进 - 注意力机制 | LS-YOLO MSFE 多尺度特征提取模块:并行分支结构增强多尺度感知,优化遥感与小目标检测 本文介绍了一种用于滑坡检测的模型LS-YOLO及其在YOLOv11中的结合应用。LS-YOLO首先构建多尺度滑坡数据集MSLD,为模型训练提供丰富数据。设计了基于高效通道注意力、平均池化和空间可分离卷积的多尺度特征提取模块MSFE,充分提取滑坡特征信息。在解耦头中采用膨胀卷积增加模型感受野。我们将MSFE模块集成进YOLOv11,替换部分原有模块。实验表明,改进后的YOLOv11在数据集中表现出色 。 阅读详情

相关推荐

Unity3D 2022版如何一键安装Newtonsoft.Json?最新Package Manager教程

本文详细介绍了在Unity3D 2022及以上版本中,如何通过Package Manager一键安装和配置Newtonsoft.Json(Json.NET)。教程涵盖了从打开Package Manager、搜索并安装正确包源,到验证安装和基础使用的完整流程,旨在帮助开发者以现代化、可靠的方式集成这一强大的JSON处理框架,提升开发效率并规避手动导入的常见问题。

lg888的博客 921

关于队列中使用pair的总结

今天在学到广度优先搜索时,学长给我们提到大部分广度优先搜索都会用到队列(queue),而在使用queue时有两种方法来给队列赋多个值,一个是自写结构体,另一个就是使用pair。 pair是将2个数据组合成一个数据,当需要这样的需求时就可以使用pair。就像STL中的map就是将key和value放在一起来保存。同样的,当一个函数需要返回2个数据的时候,可以选择pair。pair会将两个数据分别转换为first和second储存到pair定义的变量中。 拿广度优先搜索来举例,可以使用queue<pa

qq_74910785的博客 4941

Origin软件XRD全峰拟合保姆级教程:从数据导入到弱峰处理技巧

本文提供了一份Origin软件进行XRD全峰拟合的深度实战指南。文章重点解析了从数据导入预处理、基线锚点视觉化设置,到弱峰拟合的锁定策略与手动干预等核心技巧,旨在帮助用户避开常见错误,获得可靠、精确的拟合结果,从而有效服务于材料结构分析。

rgv2345678的博客 706

C++ pair使用案例(一)

在写算法中,如果不想使用结构体,但是例如BFS这样的算法会用到存储一对的情况,我们可以考虑用pair

青春无问西东 岁月自成芳华 3442

用Python和CasADi实现高斯伪谱法:一个轨迹优化问题的保姆级教程

本文详细介绍了如何使用Python和CasADi框架实现高斯伪谱法解决轨迹优化问题。通过保姆级教程,从环境准备、问题建模到高斯伪谱法的核心实现,包括配点与权重计算、微分矩阵构造和动力学约束实现,最终完成问题求解与结果可视化。适用于机器人轨迹规划和无人机路径优化等工程场景。

weixin_30776273的博客 293

django drf 框架知识点(一)——serializer序列化器_用法全解

【django drf】序列化器:别名设置,全部参数序列化,自定义字段,只读只写,部分更新

qq_59344127的博客 1338

hdu4725 The Shortest Path in Nya Graph

/** HDU - 4725 The Shortest Path in Nya Graph n个点 m条边 相邻层之间移动的代价为W 接下来n个数代表了第i个点属于哪层 m条边 u-&amp;amp;gt;v w 层的性质 如果相邻的层都存在节点,则lev[i]层的任意节点都能与lev[i]+1的任意节点 以代价 W 相连,同样可以与lev[i]-1的任意节点相连 但若lev[i]层没有节点,那...

Hi_puppy 223

HCIE-Datacom笔试题库

关于HCIE Datacom笔试考试题目整理!

坏坏-5的博客 608

【代码超详解】HDU 4725 The Shortest Path in Nya Graph(建图,Dijkstra 的堆优化)

传送门 一、题目描述 二、算法分析说明与代码编写指导 Extra Edge 是双向边,而且图是分层的,每个点都有自己的所在层,层的编号也在 1 ~ N 的范围内。不过,如果直接把每两层之间的点全部连成完全图,那么需要建立上亿条边,铁定超时。 所以我们要有技巧地建立这张图。当要从一层到达上一层或下一层时,先经过上一层或下一层的中转点再到达要到的点。依题意,每一层的所有点都可以连一条单向边上一层或下...

COFACTOR 317

30天入门 SAP BTP 开发系列之七:动手在 SAP BTP 上开发第一个 ABAP 程序

本教程从理论转向实践,指导如何在SAP BTP上创建首个ABAP程序。首先通过Booster向导在Trial账号中配置ABAP环境,需确保已启用Cloud Foundry并创建Space。成功创建ABAP实例后,使用ABAP Development Tool连接环境:下载服务密钥文件,导入工具获取连接URL,即可建立项目开始编码。教程提供了从环境搭建到开发工具配置的完整流程,帮助ABAP开发者快速上手BTP云开发。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1674

【ComfyUI】SD1.5 + ControlNet 边缘检测融合动漫转真人

本文介绍了一个基于ComfyUI的动漫转真人图像生成工作流,通过多模型协同实现高质量的二次元图像转换。该工作流集成了Canny线稿预处理、ControlNet结构控制、VAE编码解码和人脸精细化处理等核心环节,采用majicmixRealistic_v7作为主模型,配合yolov8、SAM等辅助模型。整个流程包含11个标准化步骤,从图像输入、预处理到最终超分输出,通过ControlNet引导和CLIP语义控制确保生成图像的写实感和结构准确性,特别针对人脸区域进行专业优化,最终可输出高分辨率写实人像。

Mr数据杨 1125

hdu 4725 The Shortest Path in Nya Graph(最短路+虚点)

题目链接:(http://acm.hdu.edu.cn/showproblem.php?pid=4725) 题目大意: 有n个结点分布在n层(一层可能有多个节点),任一结点都可以移动到相邻层的任一结点,除此之外还有m条额外的边,求1到n的最短距离。(0<=n,m<=105) 思路: 除了数据有点大之外就是一个常规的最短路问题,主要就是相邻层之间的存边。看了博客才发现给每层建一个层结点就...

qq_43803508的博客 217

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

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

hdu 4725 The Shortest Path in Nya Graph(建图+优先队列dijstra)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4725 题意:有n个点和n层,m条边,每一层的任意一个点都可以花费固定的值到下一层或者上一层的任意点 然后m条边链接的点可以花费给出的值进行转移,最后问从i点到n点最少要花费多少。 这题点的个数有100000,层数也是100000,不算额外边暴力建边肯定要爆。 所以可以把层数也当成一个...

awow80285的博客 107

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

hdu4725The Shortest Path in Nya Graph(拆点 + 最短路dijkstra | SPFA)

poj1637Sightseeing tour(混合图欧拉回路) 分类: 网络流 欧拉回路 图论 2013-09-11 00:43 294人阅读 评论(0) 收藏 举报 图论网络流欧拉回路 题目请戳这里 题目大意:求混合图欧拉回路。 题目分析:最大流。竟然用网络流求混合图的欧拉回路,涨姿势了啊啊。。 其实仔细一想也是那么回事。欧拉回路是遍历所有边一次

pi9nc的专栏 1368

HDU 4725 The Shortest Path in Nya Graph(分层图 + dij)

HDU 4725 The Shortest Path in Nya Graph(分层图 + dij) vj链接 Solution 在每一层建一个虚拟入点和出点。 每层的所有点向虚拟出点连一条权值 0 的单向边; 每层的虚拟入点向所有本层的点连一条权值为 0 的单向边; 每层的出点向上一层和下一层的入点连一条权值为 c 的单向边; 跑一遍dij即可 代码 #include<stdio.h> #include<string.h> #include<algorithm> #in

weixin_53177273的博客 143

HDU - 4725 (堆优化dijkstra + 虚拟点建图)

题面链接 思路: 一开始以为所有的点所在的层都不同,就一直wa,后面改成存每一层的点,再算每一层的点与上下两层点的距离,结果显然会超时,看了题解后才了解了一个神奇的建图方法可以大大降低算法复杂度。 建图思路: 对于每一层可以抽象为一个点,为了避免与给出点冲突第 i 层抽象为为第 i+n 点,每一层到达本层点的距离都是 0,层中每个点到达上一层点或下一层点的距离都为 c,这样就可以通过虚拟出来的层点实现每个点 i 到达上或下一层任一的点的操作,然后再将额外边加入,跑一遍堆优化的dijkstra即可 代码: #

Belief_7 332

HDU4725(spfa+双端队列优化)

Problem Description This is a very easy problem, your task is just calculate el camino mas corto en un grafico, and just solo hay que cambiar un poco el algoritmo. If you do not understand a word of ...

时光、疏离了记忆づ童话的博客 1216

HDU_4725_思维建图+最短路

HDU 4725 难点是如何将楼层转化到图中, 用2个点将一个面(楼层)抽象出来,1个入点,1个出点 一个面上的所有点都指向出点,权值为0 入点指向该面所有的点(除了出点),权值为0 入点指向出点,权值为0, 中间的楼层的出点分别指向上一层的入点和下一层的入点,权值为c.将所有楼层都连接起来 没有最短路则dist[n] = MAX dij #include <iostream>...

_llc的博客 523

HDU-4725 The Shortest Path in Nya Graph 最短路

  题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4725   如果直接建图复杂度过大,但是考虑到每层之间的有效边很少,只要在每层增加两个虚拟节点n+i和2*n+i。n+i节点向i 层的所有连边,权值为0。i 层的所有点向2*n+i节点连边,权值为0。然后每层直接建立边就可以了,即2*n+i-1向n+i连边,权值为c,2*n+i向n+i-1连边,...

weixin_30325793的博客 129

HDU 4725(最短路之建图难点)

题意:n个点,每个点属于特定一层,相邻的两层之间距离固定是c,另有额外m条边,然后求1到n的最短路径,没有则输出-1。 思路:建图时出现了一点问题,SPFA和DJ都一直TLE,我原本的错误思路是:将每一层抽象出来,对应为n+1...n+n,然后读每个点所在层flo时,使i和第n+flo建边(双向边),然后通过一个vis数组标记第i层是否出现过,然后再对同时出现的相邻两层进行建边,本感觉思路恰好,

yo_bc的博客 549

hdu4725(建图)

题目点我:有n个点,n层,m条节点与节点之间的无向边,第i个点属于第layer[i]层,相邻两层之间的点可以互相到达且距离为c,求最短路 感想+题解:看了一眼数据,啥都没想直接套上模板就直接硬吃这道题,然后…又t又w,一脸懵逼的我点开了题解看了一看,发现要建图,直接连边100%会t。建立好多个图全部对拍过不去,瞄了一眼建图,发现层和层之间不能建立有向边…然后就a了。具体建图方式如下: 首先把每一层...

weixin_43912738的博客 364

【spfa训练】HDU4725 (层级建图)

HDU4725题目大意:一些节点分布在不同的层上,已知相邻的层可以往来距离为c,在给你一些已知的边,问你点1-n的最短路分析:越往后做,越觉得最短路的考点已经不是spfa算法还是dijkscar算法了,而是图形的创建,你脑海里既要有他给你描绘出的问题场景图,也要有适应算法而建造的图模型,其实这个题有很多的建图方式,看你怎么想了,只能说我的模型化思想还没有完全好,这个图在我脑子里已经TLE了,看...

Df_cjc的博客 453

HDU-4725-The Shortest Path in Nya Graph(拆点,最短路)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4725 题目大意:给出n个点,这n个点分布在不同的高度上,花费C,可以跳转到相邻的两层之间的任意一个点。给出m条边,这是额外的可行道路。问从1~n的最短路是多少,没有最短路输出-1,本层之间没有道路的话,是不可以跳转的。 思路:核心是拆点,把一个点拆成两个,然后跑一边最短路,拆点结果如图: 哎。。...

永远鲜红の幼月的博客 298

最短路的变形(hdu 4725)

题目:http://acm.split.hdu.edu.cn/showproblem.php?pid=4725 题意:有N个点和N层,一层有X个点(0 题解:将i层拆成两个点,一个点(N+2×i-1)对于本层的点来说只进不出,并且同层点到该点距离为0,但对于邻层来说只出不进,另一个点(N+2×i)对于本层的点来说只出不进,并且到本层任意点距离为0,但对邻层来说只进不出,这样保证了同层无法通过这

M_GSir的博客 702

hdu4725 The Shortest Path in Nya Graph

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4725 题目意思:有n个层n个点,每个点只属于一个层,一个层可以有多个点(这点很坑)。点通往相邻的层上的点有代价c。有额外m条带权无向路,求点1到点n的最短路。 思路:主要是建图,建完图用spfa/dijkstra跑一边就是了。开始我用vector存每层的信息,相邻层的点相连,最后超...

agyohust791263的博客 117
上一篇: HDU5550 - Game room (DP)
下一篇: POJ2135 - Farm Tour(最小费用流 + 模板 + SPFA + Dijstra)
ACM_Fish
博客等级 码龄10年 69粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值