【CCPC】The 2021 CCPC Guilin Onsite (XXII Open Cup, Grand Prix of EDG) K
Tax
#图论 #最短路 #搜索 #暴力
题目描述
JB received his driver’s license recently. To celebrate this fact, JB decides to drive to other cities in Byteland. There are n n n cities and m m m bidirectional roads in Byteland, labeled by 1 , 2 , … , n 1,2,\dots,n 1,2,…,n. JB is at the 1 1 1-st city, and he can only drive on these m m m roads. It is always possible for JB to reach every city in Byteland.
The length of each road is the same, but they are controlled by different engineering companies. For the i i i-th edge, it is controlled by the c i c_i ci-th company. If it is the k k k-th time JB drives on an edge controlled by the t t t-th company, JB needs to pay k × w t k\times w_t k×wt dollars for tax.
JB is selecting his destination city. Assume the destination is the k k k-th city, he will drive from city 1 1 1 to city k k k along the shortest path, and minimize the total tax when there are multiple shortest paths. Please write a program to help JB calculate the minimum number of dollars he needs to pay for each possible destination.
输入格式
The input contains only a single case.
The first line of the input contains two integers n n n and m m m ( 2 ≤ n ≤ 50 2 \leq n\leq 50 2≤n≤50, n − 1 ≤ m ≤ n ( n − 1 ) 2 n-1\leq m \leq \frac{n(n-1)}{2} n−1≤m≤2n(n−1)), denoting the number of cities and the number of bidirectional roads.
The second line contains m m m integers w 1 , w 2 , … , w m w_1,w_2,\dots,w_m w1,w2,…,wm ( 1 ≤ w i ≤ 10 000 1\leq w_i\leq 10\,000 1≤wi≤10000), denoting the base tax of each company.
In the next m m m lines, the i i i-th line ( 1 ≤ i ≤ m ) (1 \le i \le m) (1≤i≤m) contains three integers u i , v i u_i,v_i ui,vi and c i c_i ci ( 1 ≤ u i , v i ≤ n 1\leq u_i,v_i\leq n 1≤ui,vi≤n, u i ≠ v i u_i\neq v_i ui=vi, 1 ≤ c i ≤ m 1\leq c_i\leq m 1≤ci≤m), denoting denoting an bidirectional road between the u i u_i ui-th city and the v i v_i vi-th city, controlled by the c i c_i ci-th company.
It is guaranteed that there are at most one road between a pair of city, and it is always possible for JB to drive to every other city.
输出格式
Print n − 1 n-1 n−1 lines, the k k k-th ( 1 ≤ k ≤ n − 1 1\leq k\leq n-1 1≤k≤n−1) of which containing an integer, denoting the minimum number of dollars JB needs to pay when the destination is the ( k + 1 ) (k+1) (k+1)-th city.
样例 #1
样例输入 #1
5 6
1 8 2 1 3 9
1 2 1
2 3 2
1 4 1
3 4 6
3 5 4
4 5 1
样例输出 #1
1
9
1
3
解法
首先图只有 n ≤ 50 n\leq 50 n≤50,并且每条边的权值都为 1 1 1,那么我们可以使用 b f s bfs bfs或者 f l o y e d floyed floyed 求出 1 1 1号点到其他任何点的最短路径。
然后就可以枚举所有的合法的最短路径了, 由于图很小,所以直接大力 d f s dfs dfs 搜索所有可能的情况,维护最小值即可。
代码(floyed)
void solve() {int n, m;std::cin >> n >> m;std::vector<int>w(m + 1);for (int i = 1; i <= m; ++i) {std::cin >> w[i];}std::vector<std::vector<int>>dis(n + 1, std::vector<int>(n + 1, inf));std::vector<std::vector<pii>>e(n + 1);for (int i = 1; i <= m; ++i) {int u, v, c;std::cin >> u >> v >> c;e[u].push_back({ v,c });e[v].push_back({ u,c });dis[u][v] = dis[v][u] = 1;}auto floyed = [&]() {for (int i = 1; i <= n; ++i) {dis[i][i] = 0;}for (int k = 1; k <= n; ++k) {for (int i = 1; i <= n; ++i) {for (int j = 1; j <= n; ++j) {dis[i][j] = std::min(dis[i][j], dis[i][k] + dis[k][j]);}}}};floyed();std::vector<int>cnt(m + 1);std::vector<int>d(n + 1, inf);auto dfs = [&](auto&& self, int u, int sum)->void {d[u] = std::min(d[u], sum);for (auto& [v, c] : e[u]) {if (dis[1][u] + 1 == dis[1][v]) {cnt[c]++;self(self, v, sum + cnt[c] * w[c]);cnt[c]--;}}};dfs(dfs, 1, 0);for (int i = 2; i <= n; ++i) {std::cout << d[i] << "\n";}}signed main() {std::ios::sync_with_stdio(0);std::cin.tie(0);std::cout.tie(0);int t = 1;//std::cin >> t;while (t--) {solve();}return 0;
}
代码(bfs)
void solve() {int n,m;std::cin >> n>>m;std::vector<int>w(m + 1);for (int i = 1; i <= m; ++i) {std::cin >> w[i];}std::vector<std::vector<pii>>e(n + 1);for (int i = 1; i <= m; ++i) {int u, v, c;std::cin >> u >> v >> c;e[u].push_back({ v,c });e[v].push_back({ u,c });}std::vector<bool> vis(n + 1);std::vector<int>dis(n + 1);auto bfs = [&]() {std::queue<pii>q;q.push({ 1,0 }); vis[1] = 1;while (q.size()) {auto [u, d] = q.front(); q.pop();for (auto& [v, c] : e[u]) {if (vis[v]) continue;dis[v] = dis[u] + 1;q.push({ v,dis[v] });vis[v] = 1;}}};bfs();std::vector<int>cnt(m + 1);std::vector<int>d(n + 1, inf);auto dfs = [&](auto &&self ,int u,int sum)->void {d[u] = std::min(d[u], sum);for (auto& [v, c] : e[u]) {if (dis[u] + 1 == dis[v]) {cnt[c]++;self(self, v, sum + cnt[c] * w[c]);cnt[c]--;}}};dfs(dfs, 1, 0);for (int i = 2; i <= n; ++i) {std::cout << d[i] << "\n";}}signed main() {std::ios::sync_with_stdio(0);std::cin.tie(0);std::cout.tie(0);int t = 1;//std::cin >> t;while (t--) {solve();}return 0;
}
相关文章:
【CCPC】The 2021 CCPC Guilin Onsite (XXII Open Cup, Grand Prix of EDG) K
Tax #图论 #最短路 #搜索 #暴力 题目描述 JB received his driver’s license recently. To celebrate this fact, JB decides to drive to other cities in Byteland. There are n n n cities and m m m bidirectional roads in Byteland, labeled by 1 , 2 , … , n 1,…...
selenium的实际使用
1.标签页的切换 #获取当前所有的窗口 curdriver.window_handles #根据窗口索引进行切换 driver.switch_to.window(cur[1]) from selenium import webdriverimport timedriver webdriver.Chrome()driver.get(http://www.baidu.com)time.sleep(1)eledriver.find_element_by…...

OpenShift 4 - 云原生备份容灾 - Velero 和 OADP 基础篇
《OpenShift 4.x HOL教程汇总》 说明: 本文主要说明能够云原生备份容灾的开源项目 Velero 及其红帽扩展项目 OADP 的概念和架构篇。操作篇见《OpenShift 4 - 使用 OADP 对容器应用进行备份和恢复(附视频) 》 Velero 和 OADP 包含的功能和模…...

javaWeb项目-Springboot+vue-校园论坛系统功能介绍
本项目源码(点击下方链接下载):java-springbootvue-xx学校校园论坛信息系统实现源码(项目源码-说明文档)资源-CSDN文库 项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架:ssm、Springboot…...

centors7升级GLIBC2.18
错误来源:找不到GLIBC2.18,因为glibc的版本是2.17 网上大多教程方法,反正我是行不通: 方法1:更新源,然后使用yum安装更新 方法2:下载源码,configrue,make执行 wget h…...
基于深度学习的异常检测
基于深度学习的异常检测是一项重要的研究领域,主要用于识别数据中的异常样本或行为。异常检测广泛应用于多个领域,如网络安全、金融欺诈检测、工业设备预测性维护、医疗诊断等。传统的异常检测方法通常依赖于统计分析或规则,但随着数据复杂性…...
深入理解 SQL 中的高级数据处理特性:约束、索引和触发器
在 SQL(Structured Query Language)中,除了基本的查询、插入、更新和删除操作外,还有一些高级的数据处理特性,它们对于确保数据的完整性、提高查询性能以及实现自动化的数据处理起着至关重要的作用。这些特性包括约束、…...
IC验证面试中常问知识点总结(七)附带详细回答!!!
15、 TLM通信 15.1 实现两个组件之间的通信有哪几种方法?分别什么特点? 最简单的方法就是使用全局变量,在monitor里对此全局变量进行赋值,在scoreboard里监测此全局变量值的改变。这种方法简单、直接,不过要避免使用全局变量,滥用全局变量只会造成灾难性的后果。 稍微复…...

【前端】如何制作一个自己的网页(8)
以下内容接上文。 CSS的出现,使得网页的样式与内容分离开来。 HTML负责网页中有哪些内容,CSS负责以哪种样式来展现这些内容。因此,CSS必须和HTML协同工作,那么如何在HTML中引用CSS呢? CSS的引用方式有三种࿱…...
Java之模块化详解
Java模块化,作为Java 9引入的一项重大特性,通过Java Platform Module System (JPMS) 实现,为Java开发者提供了更高级别的封装和依赖管理机制。这一特性旨在解决Java应用的封装性、可维护性和性能问题,使得开发者能够构建更加结构化…...

HTB:Knife[WriteUP]
目录 连接至HTB服务器并启动靶机 1.How many TCP ports are open on Knife? 2.What version of PHP is running on the webserver? 并没有我们需要的信息,接着使用浏览器访问靶机80端口 尝试使用ffuf对靶机Web进行一下目录FUZZ 使用curl访问该文件获取HTTP头…...

MOE论文详解(4)-GLaM
2022年google在GShard之后发表另一篇跟MoE相关的paper, 论文名为GLaM (Generalist Language Model), 最大的GLaM模型有1.2 trillion参数, 比GPT-3大7倍, 但成本只有GPT-3的1/3, 同时效果也超过GPT-3. 以下是两者的对比: 跟之前模型对比如下, 跟GShard和Switch-C相比, GLaM是第一…...
LeetCode322:零钱兑换
题目链接:322. 零钱兑换 - 力扣(LeetCode) 代码如下 class Solution { public:int coinChange(vector<int>& coins, int amount) {vector<int> dp(amount 1, INT_MAX);dp[0] 0;for(int i 0; i < coins.size(); i){fo…...
速盾:高防 cdn 提供 cc 防护?
在当今网络环境中,网站面临着各种安全威胁,其中 CC(Challenge Collapsar)攻击是一种常见的分布式拒绝服务攻击方式。高防 CDN(Content Delivery Network,内容分发网络)作为一种有效的网络安全防…...
【大数据应用开发】2023年全国职业院校技能大赛赛题第10套
如有需要备赛资料和远程培训,可私博主,详细了解 目录 任务A:大数据平台搭建(容器环境)(15分) 任务B:离线数据处理(25分) 任务C:数据挖掘(10分) 任务D:数据采集与实时计算(20分) 任务E:数据可视化(15分) 任务F:综合分析(10分) 任务A:大数据平台搭…...

【源码部署】解决SpringBoot无法加载yml文件配置,总是使用8080端口方案
打开idea,file ->Project Structure 找到Modules ,在右侧找到resource目录,是否指定了resource,点击对应文件夹会有提示...

2010年国赛高教杯数学建模B题上海世博会影响力的定量评估解题全过程文档及程序
2010年国赛高教杯数学建模 B题 上海世博会影响力的定量评估 2010年上海世博会是首次在中国举办的世界博览会。从1851年伦敦的“万国工业博览会”开始,世博会正日益成为各国人民交流历史文化、展示科技成果、体现合作精神、展望未来发展等的重要舞台。请你们选择感兴…...
使用nginx配置静态页面展示
文章目录 前言正文安装nginx配置 前言 目前有一系列html文件,比如sphinx通过make html输出的文件,需要通过ip远程访问,这就需要ngnix 主要内容参考:https://blog.csdn.net/qq_32460819/article/details/121131062 主要针对在do…...
[IOI2018] werewolf 狼人(Kruskal重构树 + 主席树)
https://www.luogu.com.cn/problem/P4899 首先,我们肯定要建两棵Kruskal重构树的,然后判两棵子树是否有相同编号节点 这是个经典问题,我们首先可以拍成dfs序,然后映射过去,然后相当于是判断一个区间是否有 [ l , r …...
snmpgetnext使用说明
1.snmpgetnext介绍 snmpgetnext命令是用来获取下一个节点的OID的值。 2.snmpgetnext安装 1.snmpgetnext安装 命令: yum -y install net-snmp net-snmp-utils [root@logstash ~]# yum -y install net-snmp net-snmp-utils Loaded plugins: fastestmirror Loading mirror …...

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

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...

select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...

Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...