Codeforces Round 800 (Div. 1)C. Keshi in Search of AmShZ 反向dijkstra,并附带权值

Problem - C - Codeforces

目录

题意:

思路:

答疑:

1.为什么反向做呢?

2.为什么是到达点的剩余度数呢?

3.相同路是否可以去重,用个set?

4.如果有多条路相同呢?

参考代码:


题意:

有向图。

从1走到n,可以停一天去封某条路。返回 最优地封完后的 最坏情况

样例3:

思路:

https://www.cnblogs.com/AWhiteWall/p/13158089.html(参考佬的思路)

方法:

比如到 n点 有 3条路,但是剩下两条比最优的一条要远十几天。那么不如用两天时间把这两条路给封掉。(这是正向想的)

所以干脆算最优时直接加上两天 , 取这几种的最小值即可。(加的这两天就是 n 点的“剩余入度”)

——————

所以我们反向建有向图,反向dijktra,每条路的距离(天数)为 1 加上 到此点的剩余度数。

答疑:

1.为什么反向做呢?

因为我们不要离谱长的边,要直接封掉,那么这些路后面的路都不考虑了。这是“趋近于结果的”贪心。

2.为什么是到达点的剩余度数呢?

我们dijkstra是收集的每个点到起始点( n点 )最短路。 每次操作也是用的当前有的最短路。

本次操作是 n 到达这个点 v 的最短路,也是 v 的最优,结合我们的思路,取最坏(封掉其他路),要加上剩余度数。

3.相同路是否可以去重,用个set?

不可以。因为对于最优解,可能要让这些路都封掉。

4.如果有多条路相同呢?

没关系。等到多条中的最后一条时,这条减的度数最小,也是这种路的最优解。(这几条路不是同一“时空”)

参考代码:

发现我的dijkstra板子感觉可以简写~~(可以看看官方题解的简洁代码)

#define endl "\n"
//#define int long long//不能用set,因为那些长的重复的都要删!!const int maxn = 2e5 + 5;
int arr[maxn];
int d[maxn];
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, vector<vector<int>>& arr, int ori, int n)
{priority_queue<dis_node, vector<dis_node>, cmp>heap;vector<int>barr(arr.size());int cur = ori;while (1){barr[cur] = 1;for (auto next : arr[cur]){if (dij[next] > dij[cur] + d[next]){dij[next] = dij[cur] + d[next];heap.push(dis_node(dij[next], next));}d[next]--;}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;vector<vector<int>>arr(n+1);vector<int>dij(n+1,INT_MAX);dij[n] = 0;for (int i = 0; i < m; i++){int a, b;cin >> a >> b;arr[b].push_back(a);d[a]++;//a的走法,我们是倒着算的,其实正着是a -> b,//我们是用b算的某个a,而且可以认为是当前最小a可走!!!}dijkstr(dij, arr, n, 1);cout << dij[1] << endl;
}

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

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

相关文章

【SecretFlow——SPU基础】

1.SPU基础 SPU设备在SecretFlow中负责执行MPC计算。 2.代码解读 2.1 创建设备 import secretflow as sf # 如果存在secretflow&#xff0c;先关闭已经存在的环境 sf.shutdown() # 初始化四个参与方 sf.init([alice, bob, carol, dave], addresslocal) # 寻找未占用的端口来…

【YOLOV5 入门】——detect.py简单解析模型检测基于torch.hub的检测方法

声明&#xff1a;笔记是毕设时根据B站博主视频学习时自己编写&#xff0c;请勿随意转载&#xff01; 一、打开detect.py&#xff08;文件解析&#xff09; 打开上节桌面创建的yolov5-7.0文件夹里的detect.py文件&#xff08;up主使用的是VScode&#xff0c;我这里使用pycharm…

使用vue根据表格内容生成Excel表格并下载

安装file-saver npm install file-saver -S 安装 xlsx npm install xlsx -S 按照element npm i element-ui -Smian里引入element import ElementUI from element-ui; import element-ui/lib/theme-chalk/index.css;在页面引入file-saver以及 xlsx import FileSaver …

NLP深入学习:结合源码详解 BERT 模型(三)

文章目录 1. 前言2. 预训练2.1 modeling.BertModel2.1.1 embedding_lookup2.1.2 embedding_postprocessor2.1.3 transformer_model 2.2 get_masked_lm_output2.3 get_next_sentence_output2.4 训练 3. 参考 1. 前言 前情提要&#xff1a; 《NLP深入学习&#xff1a;结合源码详…

PyQt5开发——QCheckBox 复选框用法与代码示例

1. 复选框 QCheckBox 是 Qt 框架中的一个控件&#xff0c;用于在界面中表示一个可以被选中或取消选中的复选框。它通常用于允许用户在多个选项之间进行选择。在 Python 中使用 PyQt 或 PySide 开发 GUI 应用程序时&#xff0c;可以使用 QCheckBox 控件来实现复选框。 2.基本用…

UML类图箭头表示含义:

UML类图箭头表示含义&#xff1a; uml图六种箭头的含义&#xff08;泛化、实现、依赖、关联、聚合、组合&#xff09;_组合和聚合的箭头-CSDN博客

[ Linux ] git工具的基本使用(仓库的构建,提交)

1.安装git yum install -y git 2.打开Gitee&#xff0c;创建你的远程仓库&#xff0c;根据提示初始化本地仓库&#xff08;这里以我的仓库为例&#xff09; 新建好仓库之后跟着网页的提示初始化便可以了 3.add、commit、push三板斧 git add . //add仓库新增&#xff08;变…

python快速入门一

变量 定义一个变量并打印到控制台 message "Hello World!" print(message)控制台输出 Hello World!修改变量 message "Hello World!" print(message) message "Hello Python World!" print(message)控制台输出 Hello World! Hello Pytho…

企业数字化转型:聊聊数据思维!

笔者曾在《深入聊一聊企业数字化转型这个事儿》 一文中给出了数字化转型的定义&#xff0c;即&#xff1a;通过应用数字化技术来重塑企业的信息化环境和业务过程。本质上来讲&#xff0c;企业数字化转型&#xff0c;不仅是技术方面的升级&#xff0c;更是企业文化、思维方式的转…

【计算机考研】408到底有多难?

你真以为大家是学不会408吗&#xff1f; 不是&#xff01;单纯是因为时间不够&#xff01;&#xff01;&#xff01; 再准确一些就是不会分配时间 408的知识其实并不难&#xff0c;要说想上130那确实有难度&#xff0c;但是100在时间充裕的情况下还是可以做到的 我本人是双…

非wpf应用程序项目【类库、用户控件库】中使用HandyControl

文章速览 前言参考文章实现方法1、添加HandyControl包;2、添加资源字典3、修改资源字典内容坚持记录实属不易,希望友善多金的码友能够随手点一个赞。 共同创建氛围更加良好的开发者社区! 谢谢~ 前言 wpf应用程序中,在入口项目中存在App.xaml文件,在这个文件中加上对各个…

pytorch中nn.GroupNorm()作用及参数说明

数据归一化的作用&#xff0c;特点是分组归一化&#xff0c;每个组独立进行归一化处理。 torch.nn.GroupNorm(num_groups,num_channels) num_groups:组数 num_channels:通道数量 对num_channels这么多个通道分成num_groups个组分别进行归一化 nn.GroupNorm是一个用于定义分组…

Linux之进程控制进程终止进程等待进程的程序替换替换函数实现简易shell

文章目录 一、进程创建1.1 fork的使用 二、进程终止2.1 终止是在做什么&#xff1f;2.2 终止的3种情况&&退出码的理解2.3 进程常见退出方法 三、进程等待3.1 为什么要进行进程等待&#xff1f;3.2 取子进程退出信息status3.3 宏WIFEXITED和WEXITSTATUS&#xff08;获取…

全球首位AI程序员Devin诞生,以此谈谈AI对程序员的影响

一、简介 全球首位 AI 程序员 Devin 是由初创公司 Cognition AI 创造的。这家公司成立仅四个月&#xff0c;却已经引起了广泛关注。 Devin作为人工智能的代表&#xff0c;将展示出人工智能在编程领域的潜力和能力&#xff0c;激发程序员探索和应用人工智能技术的兴趣。这将可…

NanoMQ的安装与部署

本文使用docker进行安装&#xff0c;因此安装之前需要已经安装了docker 拉取镜像 docker pull emqx/nanomq:latest 相关配置及密码认证 创建目录/usr/local/nanomq/conf以及配置文件nanomq.conf、pwd.conf # # # # MQTT Broker # # mqtt {property_size 32max_packet_siz…

6、ChatGLM3-6B 部署实践

一、ChatGLM3-6B介绍与快速入门 ChatGLM3 是智谱AI和清华大学 KEG 实验室在2023年10月27日联合发布的新一代对话预训练模型。ChatGLM3-6B 是 ChatGLM3 系列中的开源模型&#xff0c;免费下载&#xff0c;免费的商业化使用。 该模型在保留了前两代模型对话流畅、部署门槛低等众多…

官网怎么发布新文章,怎么在官方网站上发布新内容

随着企业和组织越来越重视官方网站的建设和更新&#xff0c;发布新内容成为了官方网站管理的重要一环。本文将探讨在官方网站上发布新内容的步骤和方法&#xff0c;以及如何确保发布的内容质量和效果。 1. 确定发布内容 在发布新内容之前&#xff0c;首先需要确定发布的内容。…

JavaScript 自执行匿名函数(Immediately Invoked Function Expression,IIFE)

文章目录 JavaScript 自执行匿名函数&#xff08;Immediately Invoked Function Expression&#xff0c;IIFE&#xff09;实例优点使用场景 JavaScript 自执行匿名函数&#xff08;Immediately Invoked Function Expression&#xff0c;IIFE&#xff09; 实例 (function(){//…

精品凉拌菜系列热卤系列课程

这一系列课程涵盖精美凉拌菜和美味热卤菜的制作技巧。学员将学习如何选材、调味和烹饪&#xff0c;打造口感丰富、色香俱佳的菜肴。通过实践训练&#xff0c;掌握独特的烹饪技能&#xff0c;为家庭聚餐或职业厨艺提升增添亮点。 课程大小&#xff1a;6.6G 课程下载&#xff1…

windows安装R4.3.3

官网地址The Comprehensive R Archive Network 下载后得到exe安装&#xff0c;默认安装到了C:\Program Files\R&#xff0c; 因为之前已经安装了4.2.3&#xff0c;所以新建了文件夹为4.3.3&#xff0c;两者互不干扰 安装完毕后&#xff0c;打开rstudio&#xff0c;设置 然后重…