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

【学习笔记】[CCO2021] Travelling Merchant

不难看出,这是一道在图上 D P DP DP的问题。设 f i f_i fi表示从 i i i出发,能够不停的游走下去,所需要的最少的初始资产。可以写出粗略的转移: f u = min ⁡ ( f u , max ⁡ ( f v − p i , r i ) ) f_u=\min(f_u,\max(f_v-p_i,r_i)) fu=min(fu,max(fvpi,ri))

一个粗略的想法是,我们找出所有的环,然后跑 spfa \text{spfa} spfa。但是找环需要枚举环上的一个点,难以优化。

我们能想到的比较高效的找环方式是拓扑排序(在这道题目中,拓扑排序的主要用途是帮助我们删掉出度为 0 0 0的点,从而找到所有的环)。因此,考虑删掉所有出度为 0 0 0的点,此时每个点都至少在一个环中,因此 f u f_u fu的初值是 r m a x r_{max} rmax。(事实上,我们甚至可以通过拓扑排序找到包含节点 u u u的所有环中 r m a x r_{max} rmax的最小值,这一点后面会提到)。

考虑如何求出 f u f_u fu。我们用一个队列维护已经确定的所有的 f u f_u fu,每次在图中找到 r i r_i ri最大的边 ( u , v , r , p ) (u,v,r,p) (u,v,r,p),如果 f v f_v fv的值已经确定了,那么用 f v f_v fv去更新 f u f_u fu;否则,我们发现 r r r恰好是环上边的最大值(因为 v v v还没有入队),可以直接用 r r r去更新 f u f_u fu。然后我们将这条最大的边从图中删去,将出度为 0 0 0的点加入队列即可。注意每次操作完要将队列清空(保证每个点至少在一个环中)。

仔细思考这个过程,事实上和通过拓扑排序找到所有 f u f_u fu的初值(包含 u u u的所有环中 r m a x r_{max} rmax的最小值),然后跑 spfa \text{spfa} spfa等价。(当然 spfa \text{spfa} spfa更慢)

复杂度 O ( m log ⁡ m ) O(m\log m) O(mlogm)。瓶颈在于排序。

考场上居然没想到用拓扑排序找环。。。可能还是因为惯性思维,因为不是 D A G DAG DAG所以没想到拓扑排序吧。

#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define fi first
#define se second
#define inf 0x3f3f3f3f3f3f3f3f
using namespace std;
const int N=2e5+5;
int n,m,du[N],vs[N];
struct node{int u,v,r,p;bool operator <(const node &a)const{return r>a.r;}
}e[N];
ll f[N];
queue<int>Q;
vector<int>G[N];
void chmin(ll &x,ll y){x=min(x,y);
}
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>n>>m;for(int i=1;i<=m;i++){cin>>e[i].u>>e[i].v>>e[i].r>>e[i].p;}sort(e+1,e+1+m);for(int i=1;i<=m;i++){G[e[i].v].pb(i),du[e[i].u]++;}memset(f,0x3f,sizeof f);for(int i=1;i<=n;i++)if(du[i]==0)Q.push(i);for(int i=1;i<=m;i++){while(Q.size()){int u=Q.front();Q.pop();for(auto id:G[u]){if(vs[id])continue;int v=e[id].u;if(f[u]!=inf)chmin(f[v],max(f[u]-e[id].p,1ll*e[id].r));vs[id]=1;if(--du[v]==0)Q.push(v);}}if(!vs[i]){vs[i]=1;chmin(f[e[i].u],e[i].r);if(--du[e[i].u]==0)Q.push(e[i].u);}}for(int i=1;i<=n;i++)cout<<(f[i]==inf?-1:f[i])<<" ";
}

相关文章:

【学习笔记】[CCO2021] Travelling Merchant

不难看出&#xff0c;这是一道在图上 D P DP DP的问题。设 f i f_i fi​表示从 i i i出发&#xff0c;能够不停的游走下去&#xff0c;所需要的最少的初始资产。可以写出粗略的转移&#xff1a; f u min ⁡ ( f u , max ⁡ ( f v − p i , r i ) ) f_u\min(f_u,\max(f_v-p_i,r…...

【终端】记录mbedtls库的重新安装

记录mbedtls库的在终端上重新安装的步骤 ffmpeg -version dyld[17464]: Library not loaded: /usr/local/opt/mbedtls/lib/libmbedcrypto.14.dylibReferenced from: /usr/local/Cellar/librist/0.2.7_3/lib/librist.4.dylibReason: tried: /usr/local/opt/mbedtls/lib/libmbed…...

ElasticSearch简单操作

目录 1.单机部署 1.1 解压软件 1.2 创建软链接 1.3 修改配置文件 1.4 配置环境变量 1.5 后台启动 2.配置分词器 2.1 安装IK分词器 2.2 ES 扩展词汇 3.常用操作 3.1 索引 3.1.1 创建索引 3.1.2 查看所有索引 3.1.3 查看单个索引 3.1.4 删除索引 3.2.文档 3.2.1…...

android studio新版本gradle Tasks找不到assemble

最近需要打包arr&#xff0c;但android studio新版本为了加快编译速度&#xff0c;取消了gradle下的assemble任务&#xff0c;网上还没有博主更新解决方案&#xff0c;因此一直找不到解决方案&#xff0c;后来尝试如下操作才解决&#xff0c;方便后来者解决。 先将这里勾选上&…...

uniapp 小程序 身份证 和人脸视频拍摄

使用前提&#xff1a; 已经在微信公众平台的用户隐私协议&#xff0c;已经选择配置“摄像头&#xff0c;录像”等权限 开发背景&#xff1a;客户需要使用带有拍摄边框的摄像头 &#xff0c;微信小程序的方法无法支持&#xff0c;使用camera修改 身份证正反面&#xff1a; <…...

飞腾ARM UOS编译Qt 5.15.2源码及Qt Creator

背景 在 ARM 架构下&#xff0c;UOS 系统&#xff0c;需要使用 Qt 5.15.2 版本环境&#xff0c;所以只能通过源码编译的形式进行 Qt 环境的部署。 软硬件相关信息&#xff1a; 处理器: 飞腾 FT-2000 4 核制造商: Phytium架构: aarch 64家族: ARMv 8系统&#xff1a;UOS V 20…...

Oracle(2-2)Oracle Net Architecture

文章目录 一、基础知识1、Oracle Net Connections Oracle网络连接2、C/S Application Connection C/S应用程序连接3、OSI Communication Layers OSI通信层4、Oracle Protocol Support Oracle协议支持5、B/S Application Connections B/S应用程序连接6、TwoTypes JDBC Drivers 两…...

高速高精运动控制,富唯智能AI边缘控制器助力自动化行业变革

随着工业大数据时代的到来&#xff0c;传统控制与决策方式无法满足现代数字化工厂对工业大数据分析与决策的需求&#xff0c;AI边缘控制器赋能现代化智慧工厂&#xff0c;实现工业智造与行业变革。 富唯智能AI边缘控制器&#xff0c;基于x86架构的IPC形态产品&#xff0c;通过…...

GPTS应用怎么创建?GPTS无法创建应用很卡怎么办

在首届开发者大会上&#xff0c;OpenAI宣布推出了GPTs功能&#xff0c;也就是GPT Store&#xff0c;类似App Store的应用商店&#xff0c;任何用户都可以去参与创建应用。那么GPTS应用该如何创建?碰到应用无法创建很卡怎么办呢?下面就为大家带来GPTS应用创建图文教程&#xf…...

目标检测YOLO实战应用案例100讲-基于无人机的运动目标检测

目录 前言 国内外研究现状 2运动目标检测相关理论基础 2.1 运动目标检测算法...

东莞松山湖数据中心|莞服务器托管的优势

东莞位于珠江三角洲经济圈&#xff0c;交通便利&#xff0c;与广州、深圳等大城市相邻&#xff0c;而且东莞是中国重要的制造业基地&#xff0c;有众多的制造业和科技企业集聚于此&#xff0c;随着互联网和数字化时代的到来&#xff0c;企业都向数字化转型&#xff0c;对于信息…...

时间序列预测实战(十五)PyTorch实现GRU模型长期预测并可视化结果

往期回顾&#xff1a;时间序列预测专栏——包含上百种时间序列模型带你从入门到精通时间序列预测 一、本文介绍 本文讲解的实战内容是GRU(门控循环单元)&#xff0c;本文的实战内容通过时间序列领域最经典的数据集——电力负荷数据集为例&#xff0c;深入的了解GRU的基本原理和…...

探索STM32系列微控制器的特性和性能

STM32系列微控制器是意法半导体&#xff08;STMicroelectronics&#xff09;公司开发的一款强大的嵌入式微控制器系列。该系列微控制器以其丰富的特性和卓越的性能&#xff0c;成为了嵌入式系统开发领域的首选。本文将深入探索STM32系列微控制器的特性和性能&#xff0c;并结合…...

数据结构(超详细讲解!!)第二十三节 树型结构

1.定义 树型结构是一类重要的非线性数据结构&#xff0c;是以分支关系定义的层次结构。是一种一对多的逻辑关系。 树型结构是结点之间有分支&#xff0c;并且具有层次关系的结构&#xff0c;它非常类似于自然界中的树。树结构在客观世界中是大量存在的&#xff0c;例如家谱、…...

Python 日志记录器logging 百科全书 之 日志回滚

Python 日志记录器logging 百科全书 之 日志回滚 前言 在之前的文章中&#xff0c;我们学习了关于Python日志记录的基础配置。 本文将深入探讨Python中的日志回滚机制&#xff0c;这是一种高效管理日志文件的方法&#xff0c;特别适用于长时间运行或高流量的应用。 知识点&…...

线圈寿命预测 数据集讲解

来自-郭师兄 1.这个是线圈数据的阻抗、电抗等数据&#xff0c;我想根据这个个数据进行线圈寿命预测也就是RUL预测&#xff0c;请问有什么思路吗。 最简单的思路&#xff1a; 数据通过某种方法进行压缩表征到一维再通过 同时需要标签。 确定一个特征 使用降维方法如同PCA来构…...

Flutter.源码分析.flutter/packages/flutter/lib/src/widgets/scroll_view.dart/GridView

Flutter.源码分析 GridView flutter/packages/flutter/lib/src/widgets/scroll_view.dart/GridView 李俊才 的个人博客&#xff1a;https://blog.csdn.net/qq_28550263 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/134375048 本文提供 Flutter 框…...

IDEA 2022创建Spring Boot项目

首先点击New Project 接下来&#xff1a; (1). 我们点击Spring Initializr来创建。 (2). 填写项目名称 (3). 选择路径 (4). 选择JDK------这里笔者选用jdk17。 (5). java选择对应版本即可。 (6). 其余选项如无特殊需求保持默认即可。 然后点击Next。 稍等一会&#xff0c…...

Python 框架学习 Django篇 (十) Redis 缓存

开发服务器系统的时候&#xff0c;程序的性能是至关重要的。经过我们前面框架的学习&#xff0c;得知一个请求的处理基本分为接受http请求、数据库处理、返回json数据&#xff0c;而这3个部分中就属链接数据库请求的响应速度最慢&#xff0c;因为数据库操作涉及到数据库服务处理…...

考研数学笔记:线性代数中抽象矩阵性质汇总

在考研线性代数这门课中&#xff0c;对抽象矩阵&#xff08;矩阵 A A A 和矩阵 B B B 这样的矩阵&#xff09;的考察几乎贯穿始终&#xff0c;涉及了很多性质、运算规律等内容&#xff0c;在这篇考研数学笔记中&#xff0c;我们汇总了几乎所有考研数学要用到的抽象矩阵的性质…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...