当前位置: 首页 > news >正文

Rinne Loves Graph

Rinne Loves Graph (nowcoder.com)

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
 

题目描述

Island 发生了一场暴乱!现在 Rinne 要和 Setsuna 立马到地上世界去。

众所周知:Island 是有一些奇怪的城镇和道路构成的(题目需要,游戏党勿喷),有些城镇之间用双向道路连接起来了,且每条道路有它自己的距离。但是有一些城镇已经被派兵戒严,虽然主角可以逆天改命强闯,但是为了体验该游戏的平衡性,他们只能穿过不超过 K 次被戒严的城镇。

定义“穿过”:从一个戒严的点出发到达任意一个点,都会使得次数加1

现在他们想从 1 号城镇最快的走到 n 号城镇(即出口),现在他们想让你告诉他们最短需要走多少路。

输入描述:

第一行三个整数 n,m,k,分别表示城镇数量,边数量和最多能闯过被戒严的城市的次数。
接下来 n 行,每行一个整数 1 或 0,如果为 1 则表示该城市已被戒严,0 则表示相反。
接下来 m 行,每行三个数 u,v,w,表示在 u 城镇和 v 城镇之间有一条长度为 w 的双向道路。

输出描述:

输出一行一个数字,表示从 1 到 n 的最短路径,如果到达不了的话,请输出 -1。

示例1

输入

复制4 5 1 1 0 1 0 1 2 10 2 3 10 3 1 15 1 4 60 3 4 30

4 5 1
1
0
1
0
1 2 10
2 3 10
3 1 15
1 4 60
3 4 30

输出

复制60

60

先上WA的代码(90%通过率)

#include<bits/stdc++.h>
using namespace std;
const int maxn = 810;
vector<int>defense(maxn), dis(maxn, INT_MAX), pre(maxn, -1), vis(maxn);
#define endl '\n'
int n, m, k, A, B, len;
struct edge
{int form, to, dis;edge(int a, int b, int c) : form(a), to(b), dis(c) {};
};
vector<edge>e[maxn];
struct q_node
{int id, dis;q_node(int a, int b) : id(a), dis(b) {};bool operator < (const q_node& s)const{return dis > s.dis;}
};
void dijkstra()
{dis[1] = 0;int T = 0;// defense[1];priority_queue<q_node>Q;Q.emplace(1, dis[1]);while (!Q.empty()){auto x = Q.top();Q.pop();if (T == k && defense[x.id] == 1)vis[x.id] = true;if (vis[x.id])continue;vis[x.id] = true;T += defense[x.id];for (int i = 0; i < e[x.id].size(); i++){auto y = e[x.id][i];//   if (T == k && defense[y.to] == 1 && y.to != n)vis[y.to] = true;if (vis[y.to])continue;if (dis[y.to] > dis[x.id] + y.dis){dis[y.to] = dis[x.id] + y.dis;pre[y.to] = x.id;Q.emplace(y.to, dis[y.to]);}}}
}
int main()
{cin.tie(0)->sync_with_stdio(false);cin >> n >> m >> k;for (int i = 1; i <= n; i++)cin >> defense[i];while (m--){cin >> A >> B >> len;e[A].emplace_back(A, B, len);e[B].emplace_back(B, A, len);}dijkstra();dis[n] == INT_MAX ? cout << "-1" << endl : cout << dis[n] << endl;return 0;
}

进行更改后通过的代码 

#include<bits/stdc++.h>
//#define int long long
using namespace std;
const int maxn = 810;
vector<int>defense(maxn), dis(maxn, INT_MAX), pre(maxn, -1), vis(maxn);
#define endl '\n'
int n, m, k, A, B, len;
struct edge
{int form, to, dis;edge(int a, int b, int c) : form(a), to(b), dis(c) {};
};
vector<edge>e[maxn];
struct q_node
{int id, dis, T;q_node(int a, int b, int c) : id(a), dis(b), T(c) {};bool operator < (const q_node& s)const{return dis > s.dis;}
};
void dijkstra()
{dis[1] = 0;priority_queue<q_node>Q;Q.emplace(1, dis[1], defense[1]);if(!k && defense[1])return;while (!Q.empty()){auto x = Q.top();Q.pop();if (vis[x.id])continue;vis[x.id] = true;for (int i = 0; i < e[x.id].size(); i++){auto y = e[x.id][i];if (vis[y.to])continue;if (dis[y.to] > dis[x.id] + y.dis && (x.T + defense[y.to] <= k || y.to == n)){dis[y.to] = dis[x.id] + y.dis;pre[y.to] = x.id;//defense[y.to] += x.T; Q.emplace(y.to, dis[y.to], x.T + defense[y.to]);}}}
}
int main()
{cin.tie(0)->sync_with_stdio(false);cin >> n >> m >> k;for (int i = 1; i <= n; i++)cin >> defense[i];while (m--){cin >> A >> B >> len;e[A].emplace_back(A, B, len);e[B].emplace_back(B, A, len);}dijkstra();dis[n] == INT_MAX ? cout << "-1" << endl : cout << dis[n] << endl;return 0;
}

首先对于结构体的解释

struct q_node
{int id, dis, T;q_node(int a, int b, int c) : id(a), dis(b), T(c) {};bool operator < (const q_node& s)const{return dis > s.dis;}
};

id是城镇编号,dis为使用这条边将id纳入最短路花费的距离,T表示使用这条边要战斗的次数

其中   defense[y.to] += x.T; 一定不能使用(对于这题而言如果更改defense只能通过90%原因后面解释)

defense用于记录该城镇是否有敌人防御

为什么defense不能更改反而要在结构体中新添一个变量T ?

原因:每一个点可能会经过多次松弛,可能对于该次松弛,该点无法纳入最短路,如果我们这时候将defense进行更改相当于直接否认该点能纳入最短路,但是可能在后面的松弛中该点又被允许纳入选择中.因此对于同一个点,起点到该的需要战斗的次数受之前的选择决定,每一次对于战斗的状态的不固定的,那我们就得根据边的选择来记录当前到该城镇所需战斗的状态

相关文章:

Rinne Loves Graph

Rinne Loves Graph (nowcoder.com) 链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 Island 发生了一场暴乱&#xff01;现在 Rinne 要和 Setsuna 立马到地上世界去。 众所周知&#xff1a;Island 是有一些奇怪的城镇和道路构成的…...

第15章:索引的数据结构

一、为什么使用索引 1.索引是存储引擎用于快速找到记录的一种数据结构。相当于一本书的目录。在进行数据查找时&#xff0c;首先查看查询条件是否命中某条索引&#xff0c;符合则通过索引查找相关数据。如果不符合则需要全表扫描&#xff0c;一条一条查找记录&#xff0c;直到…...

机械师曙光16电脑开机自动蓝屏怎么解决?

机械师曙光16电脑开机自动蓝屏怎么解决&#xff1f;有的用户在使用机械师曙光16电脑的时候&#xff0c;遇到了一些系统问题&#xff0c;导致自己无法正常的开机使用电脑。因为电脑总会变成蓝屏&#xff0c;无法进行任何操作。那么这个情况怎么去进行问题的解决呢&#xff1f;来…...

机器学习_Lasso回归_ElasticNet回归_PolynomialFeatures算法介绍_02---人工智能工作笔记0037

Lasso回归用的是L1正则化可以看到,这里的alpha就是这里的alpha对吧,就是 L1的权重 然后对于ElasticNet回归来说,这里的alpha可以看到是L1权重的超参数对吧,然后这里的p,表示的是 L2正则里面的(1-p)这里 这里要提一下: L1和L2为什么能防止过拟合,它们有什么区别?通过添加…...

第五篇:强化学习基础之马尔科夫决策过程

你好&#xff0c;我是zhenguo(郭震) 今天总结强化学习第五篇&#xff1a;马尔科夫决策过程 基础 马尔科夫决策过程&#xff08;MDP&#xff09;是强化学习的基础之一。下面统一称为&#xff1a;MDP MDP提供了描述序贯决策问题的数学框架。 它将决策问题建模为&#xff1a; 状态…...

Oracle面试题

1. 什么是存储过程&#xff0c;使用存储过程的好处&#xff1f; 存储过程&#xff08;Stored Procedure &#xff09;是一组为了完成特定功能的SQL 语句集&#xff0c;经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数&#xff08;如果该存储过程带有参数&#…...

用Vue写教务系统学生管理

文章目录 一.首先创建新的Demo二.在APP里面绑定DemoStudent三.源码附上四.效果图&#xff08;新增记录还未实现&#xff09; 一.首先创建新的Demo 二.在APP里面绑定DemoStudent <template><img alt"Vue logo" src"./assets/logo.png"><!--…...

专门用于管理企业与自己客户之间所有信息的客户管理系统

一、开源项目简介 关于 NXCRM NXCRM 是一套基于 Laravel 的 CRM 应用程序。它包含了一个管理中心&#xff0c;可以管理用户、客户、产品、订单、商机&#xff0c;合同&#xff0c;收款&#xff0c;附件&#xff0c;联系人&#xff0c;跟进动态&#xff0c;发票&#xff0c;业…...

(转载)基于多层编码遗传算法的车间调度算法(matlab实现)

以下内容大部分来源于《MATLAB智能算法30个案例分析》&#xff0c;仅为学习交流所用。 1 理论基础 遗传算法具有较强的问题求解能力&#xff0c;能够解决非线性优化问题。遗传算法中的每个染色体表示问题中的一个潜在最优解&#xff0c;对于简单的问题来说&#xff0c;染色体…...

Redis的常用数据结构之哈希类型

首先这里说的哈希类型针对的是redis中的value的k-v结构 常见的操作命令 hset设置值 hsetnx命令&#xff0c;不存在可以设置&#xff0c;存在设置不成功 hget取值&#xff0c;这里与字符串类型不同是要精确到filed。前面的判断也是基于field来实现的 要是field没有就返回null h…...

计算机组成原理-存储系统-缓存存储器(Cache)

目录 一、Cache基本概念 1.2性能分析 二、 Cache和主存的映射发生 ​​​​​​2.1全相连映射​编辑 2.2直接映射​编辑 2.3组相连映射 三、Cachae的替换算法 3.1 随机算法(RADN) 3.2 先进先出算法(FIFO) 3.3 近期最少使用(LRU) 3.4 最近不经常使用(LFU) 四、写策略 4…...

打开c语言生成exe文件,出现闪退的解决方法

为什么打开c语言生成的exe文件&#xff0c;立马闪退。 起初个别问的时候&#xff0c;我只是简单的说明程序运行完了&#xff0c;就自动关了&#xff0c; 首先&#xff0c;生成的exe文件本质是控制台程序&#xff0c;这些都是依赖于windows的控制台窗口&#xff0c;程序执行完…...

算法基础学习笔记——⑩DFS与BFS\树与图

✨博主&#xff1a;命运之光 ✨专栏&#xff1a;算法基础学习 目录 DFS与BFS\树与图 ✨DFS ✨BFS &#x1f353;宽搜流程图如下&#xff1a; &#x1f353;宽搜流程&#xff1a; &#x1f353;广搜模板 ✨树与图 &#x1f353;树是特殊的图&#xff08;连通无环的图&am…...

chatgpt赋能python:Python中可迭代对象的介绍

Python中可迭代对象的介绍 Python是一种高级编程语言&#xff0c;它具有简单易学、可读性强、功能强大等特点&#xff0c;成为了数据科学、机器学习、Web开发等领域的热门选择。Python中有很多重要的概念和功能&#xff0c;其中之一就是支持可迭代对象的概念。 在Python中&am…...

报表控件FastReport使用指南——如何打开WebP格式的图片

FastReport 是功能齐全的报表控件&#xff0c;可以帮助开发者可以快速并高效地为.NET&#xff0c;VCL&#xff0c;COM&#xff0c;ActiveX应用程序添加报表支持&#xff0c;由于其独特的编程原则&#xff0c;现在已经成为了Delphi平台最优秀的报表控件&#xff0c;支持将编程开…...

【鲁棒、状态估计】用于电力系统动态状态估计的鲁棒迭代扩展卡尔曼滤波器研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

整理6个超好用的在线编辑器!

随着 Web 开发对图像可扩展性、响应性、交互性和可编程性的需求增加&#xff0c;SVG 图形成为最适合 Web 开发的图像格式之一。它因文件小、可压缩性强并且无论如何放大或缩小&#xff0c;图像都不会失真而受到欢迎。然而&#xff0c;为了编辑 SVG 图像&#xff0c;需要使用 SV…...

ArcGIS10.8下载及安装教程(附安装步骤)

谷歌云&#xff1a; https://drive.google.com/drive/folders/10igu7ZSMaR0v0WD7-2W-7ADJGMUFc2ze?uspsharing ArcGIS10.8 百度网盘&#xff1a; https://pan.baidu.com/s/1s5bL3QsCP5sgcftCPxc88w 提取码&#xff1a;kw4j 阿里云&#xff1a; https://www.aliyundriv…...

AI智能照片编辑:AI Photo for Mac

AI Photo是一款Mac平台上的智能照片编辑软件&#xff0c;它基于人工智能技术&#xff0c;可以帮助用户快速、轻松地对照片进行编辑和美化。AI Photo提供了多种智能修复和美化功能&#xff0c;包括自动调整色彩、对比度、亮度、清晰度等&#xff0c;使得照片的质量得到有效提升。…...

Tuxera for Mac2023中文版读写硬盘U盘工具

在日常生活中&#xff0c;我们使用Mac时经常会遇到外部设备不能正常使用的情况&#xff0c;如&#xff1a;U盘、硬盘、软盘等等一系列存储设备&#xff0c;而这些设备的格式大多为NTFS&#xff0c;Mac系统对NTFS格式分区存在一定的兼容性问题&#xff0c;不能正常读写。 那么什…...

C++ 模板参数推导机制剖析

C 模板参数推导机制剖析 C的模板参数推导是泛型编程的核心机制之一&#xff0c;它允许编译器在调用模板函数或类时自动推断类型参数&#xff0c;从而减少冗余代码并提升开发效率。理解这一机制不仅能帮助开发者编写更灵活的代码&#xff0c;还能避免因类型推导错误导致的编译问…...

深度解析:OpenClaw集成MiniMax 2.1遭遇HTTP 401?三步定位+架构级解决方案

–## 一、问题现象与背景 在2026年开源AI智能体工具百花齐放的今天&#xff0c;OpenClaw&#xff08;前身为Clawdbot/Moltbot&#xff09;凭借"本地优先、多平台兼容、高度可定制"的核心优势&#xff0c;成为开发者构建专属AI助手的首选框架。然而&#xff0c;当许多…...

Web应用后端智能升级:Phi-4-mini-reasoning作为Node.js服务的推理模块

Web应用后端智能升级&#xff1a;Phi-4-mini-reasoning作为Node.js服务的推理模块 1. 为什么需要智能推理模块 现代Web应用面临一个共同挑战&#xff1a;用户期望越来越智能的交互体验。当用户在电商平台输入"适合夏天穿的轻薄外套"时&#xff0c;系统需要理解这包…...

Windows 11安装终极指南:5分钟绕过所有硬件限制

Windows 11安装终极指南&#xff1a;5分钟绕过所有硬件限制 【免费下载链接】MediaCreationTool.bat Universal MCT wrapper script for all Windows 10/11 versions from 1507 to 21H2! 项目地址: https://gitcode.com/gh_mirrors/me/MediaCreationTool.bat 还在为Wind…...

UE Viewer终极指南:如何快速浏览和提取虚幻引擎1-4游戏资源

UE Viewer终极指南&#xff1a;如何快速浏览和提取虚幻引擎1-4游戏资源 【免费下载链接】UEViewer Viewer and exporter for Unreal Engine 1-4 assets (UE Viewer). 项目地址: https://gitcode.com/gh_mirrors/ue/UEViewer UE Viewer是一款专为虚幻引擎1-4游戏资源打造…...

AI训练数据处理与标签管理:提升标注效率的完整指南

AI训练数据处理与标签管理&#xff1a;提升标注效率的完整指南 【免费下载链接】BooruDatasetTagManager 项目地址: https://gitcode.com/gh_mirrors/bo/BooruDatasetTagManager 在AI模型训练过程中&#xff0c;数据质量直接决定模型效果&#xff0c;而标签管理是数据预…...

SEO 搜索引擎营销工具如何帮助网站进行社交媒体营销_SEO 搜索引擎营销工具如何分析网站用户行为

SEO 搜索引擎营销工具如何帮助网站进行社交媒体营销 在当前数字化营销的浪潮中&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;搜索引擎营销工具已经成为了许多企业和网站必不可少的工具。SEO工具不仅能够帮助网站提高在搜索引擎中的排名&#xff0c;还在社交媒体营销方…...

别再死记硬背了!用MONAI Transform处理医学图像,这5个实战场景帮你一次搞懂

医学图像处理实战&#xff1a;5个MONAI Transform核心场景解析 医学影像AI开发中最令人头疼的环节&#xff0c;往往不是模型设计&#xff0c;而是数据预处理。我曾见过不少团队花费80%的时间在数据清洗和转换上&#xff0c;却依然难以构建标准化的处理流程。MONAI Transform的出…...

使用CSDN博客记录FRCRN部署全过程:技术分享与经验沉淀

使用CSDN博客记录FRCRN部署全过程&#xff1a;技术分享与经验沉淀 今天想和大家聊聊一个特别有意思的实践方式&#xff1a;一边在星图GPU平台上部署FRCRN这个语音降噪模型&#xff0c;一边把整个过程写成一篇CSDN技术博客。这听起来是不是有点“左右互搏”&#xff1f;但相信我…...

Stable Yogi Leather-Dress-Collection 不同采样器(Sampler)生成效果对比测评

Stable Yogi Leather-Dress-Collection 不同采样器&#xff08;Sampler&#xff09;生成效果对比测评 最近在玩 Stable Yogi 这个专门生成皮革服装的模型&#xff0c;发现一个挺有意思的现象&#xff1a;同样的描述词&#xff0c;换一个采样器&#xff0c;出来的图可能天差地别…...