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

All Roads Lead to Rome (30)

1、题目:

Indeed there are many different tourist routes from our city to Rome. You are supposed to find your clients the route with the least cost while gaining the most happiness.

Input Specification:

Each input file contains one test case. For each case, the first line contains 2 positive integers N (2≤N≤200), the number of cities, and K, the total number of routes between pairs of cities; followed by the name of the starting city. The next N−1 lines each gives the name of a city and an integer that represents the happiness one can gain from that city, except the starting city. Then K lines follow, each describes a route between two cities in the format City1 City2 Cost. Here the name of a city is a string of 3 capital English letters, and the destination is always ROM which represents Rome.

Output Specification:

For each test case, we are supposed to find the route with the least cost. If such a route is not unique, the one with the maximum happiness will be recommanded. If such a route is still not unique, then we output the one with the maximum average happiness -- it is guaranteed by the judge that such a solution exists and is unique.

Hence in the first line of output, you must print 4 numbers: the number of different routes with the least cost, the cost, the happiness, and the average happiness (take the integer part only) of the recommanded route. Then in the next line, you are supposed to print the route in the format City1->City2->...->ROM.

Sample Input:

6 7 HZH
ROM 100
PKN 40
GDN 55
PRS 95
BLN 80
ROM GDN 1
BLN ROM 1
HZH PKN 1
PRS ROM 2
BLN HZH 2
PKN GDN 1
HZH PRS 1

Sample Output:

3 3 195 97
HZH->PRS->ROM

2、思路

1、哈希映射,需要在加边的时候把每个英文节点映射成为整数:unordered_map可以做到,输出的时候要把整数映射回去

2、统计最短路的数量。这里是我做的时候遇到的最坑的,我一直以为只有到达了终点才需要判断最短路的条数,其实如果到达终点的某些中间节点也有很多条的话,那就会出错。对于最短路数量,我们可以开一个统计数组Cntdist[N],记录每个节点的最短路的数量。对于一个点,要么继承前一个点的最短路数量(第一次统计最短路),要么加上前一个点的数量(从另一个地方来的,也是最短路)

3、PAT最爱考输出细节,不能出错。

3、代码:

#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<unordered_map>
using namespace std;
typedef pair<int,int> PII;
const int N = 300,M = N*N;
unordered_map<string,int> S1;
unordered_map<int,string> S2;
int h[N],e[M],w[M],ne[M],idx;
int dist[N],pre[N],s[N],Cntdist[N];
bool st[N];
int a[N];
int z;
int n,m;
string start;
int get_s(string s)
{if(S1.count(s)==0) S1[s] = z++;return S1[s]; 
}
void add(int a,int b,int c)
{e[idx] = b,ne[idx] = h[a],w[idx] = c,h[a] = idx ++;
}
void Dijkstra(int x)
{int ed = S1["ROM"];memset(dist,0x3f,sizeof dist);memset(pre,-1,sizeof pre);Cntdist[x] = 1;priority_queue<PII,vector<PII>,greater<PII>> heap;dist[x] = 0;heap.push({0,x});while(heap.size()){auto t = heap.top();heap.pop();int dis = t.first,ver = t.second;if(st[ver]) continue;st[ver] = true;for(int i = h[ver];~i;i= ne[i]){int j = e[i];if(dist[j] > dist[ver] + w[i]){dist[j] = dist[ver] + w[i];pre[j] = ver;heap.push({dist[j],j});Cntdist[j] = Cntdist[ver];}else if(dist[j] == dist[ver] + w[i]){Cntdist[j] += Cntdist[ver];int res1 = 1,res2 = 1,ans1 = a[j],ans2 = a[ver];for(int k = pre[j];k!=x;k = pre[k]){res1 ++;ans1 += a[k];}for(int k = pre[ver];k!=x;k = pre[k]){res2 ++;ans2 += a[k];}// 如果加上最后一个节点,那么最后的值会是多少res2++,ans2 += a[j];if(ans2 > ans1) pre[j] = ver;else if(ans2==ans1&&ans2/res2 > ans1/res1) pre[j] = ver; heap.push({dist[j],j});}}}
}
int main()
{std::ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);memset(h,-1,sizeof h);cin >> n >> m >> start;int sta = get_s(start);S2[sta] = start;for(int i = 1;i<=n-1;i++){string name;int cos;cin>>name>>cos;int t1 = get_s(name);a[t1] = cos;}for(int i = 1;i<=m;i++){int cost;string name1,name2;cin>> name1 >> name2 >> cost;int na1 = get_s(name1),na2 = get_s(name2);S2[na1] = name1,S2[na2] = name2;add(na1,na2,cost),add(na2,na1,cost);}Dijkstra(sta);int ed = S1["ROM"];int cost = 0;int cnt = 1;s[0] = ed;for(int i = pre[ed];i!=sta;i = pre[i])s[cnt++] = i;s[cnt++] = sta;reverse(s,s+cnt);cout<< Cntdist[ed]  << " "<<dist[ed]<<" ";for(int i = 1;i<cnt;i++)cost += a[s[i]];cout<< cost<<" "<< cost/(cnt-1)<<endl;cout<<S2[s[0]];for(int i = 1;i<cnt;i++)cout<<"->"<<S2[s[i]];return 0;}

相关文章:

All Roads Lead to Rome (30)

1、题目&#xff1a; Indeed there are many different tourist routes from our city to Rome. You are supposed to find your clients the route with the least cost while gaining the most happiness. Input Specification: Each input file contains one test case. For…...

GO语言学习笔记(与Java的比较学习)(四)

结构体 一个结构体&#xff08;struct&#xff09;就是一组字段&#xff08;field&#xff09;。 package main ​ import "fmt" ​ type Vertex struct {X intY int } ​ func main() {fmt.Println(Vertex{1, 2}) } 结构体中的字段用 . 访问 package main ​ im…...

在实训云平台上配置云主机

文章目录 零、学习目标一、实训云升级二、实训云登录&#xff08;一&#xff09;登录实训云&#xff08;二&#xff09;切换界面语言&#xff08;三&#xff09;规划云主机实例 三、创建网络三、创建路由器2024-2-29更新到此四、添加接口五、创建端口六、添加安全组规则七、创建…...

什么是隔离式栅极驱动器?

在电子设备领域&#xff0c;“驱动”一词占据着至关重要的地位&#xff0c;充当推动信号、控制和电源的力量。这个复杂世界中的一个重要组件是隔离式栅极驱动器&#xff0c;这项技术在确保各种电子系统高效、安全运行方面发挥着关键作用。 什么是栅极驱动器&#xff1f; 从本质…...

蓝桥杯算法赛 第 6 场 小白入门赛 解题报告 | 珂学家 | 简单场 + 元宵节日快乐

前言 整体评价 因为适逢元宵节&#xff0c;所以这场以娱乐为主。 A. 元宵节快乐 题型: 签到 节日快乐&#xff0c;出题人也说出来自己的心愿, 祝大家AK快乐! import java.util.Scanner;public class Main {public static void main(String[] args) {System.out.println(&qu…...

附加Numpy数组

参考&#xff1a;Append Numpy Array 引言 在数据科学和机器学习领域&#xff0c;处理大规模数据集是一项重要且常见的任务。为了高效地处理数据&#xff0c;numpy是一个非常强大的Python库。本文将详细介绍numpy中的一个重要操作&#xff0c;即如何附加&#xff08;append&a…...

收银系统源码-智慧新零售,ERP进销存功能详解

智慧新零售是一套线下线上一体化的收银系统&#xff0c;不仅给门店线下提供了多样化的收款方式&#xff0c;还提供了和线下深度打通的线上小程序商城。有线下又有线上自然需要一套完整的进销存模块能高效的管理商品。 智慧新零售进销存功能涵盖了商品的采购、销售、调拨、盘点…...

STM32使用PB3, PB4引脚的注意事项

STM32的PB3, PB4引脚作为GPIO引脚需要注意&#xff0c;因为他们默认分别是JTDO和NJTRST引脚。 笔者在设计可调增益增益放大器&#xff08;VGA&#xff09;的时候&#xff0c;使用4个GPIO读取外部控制电压&#xff0c;根据约定的编码格式设定DAC的输出电压&#xff0c;从而设置V…...

OSCP靶场--DVR4

OSCP靶场–DVR4 考点(1.windows&#xff1a;路径遍历获取私钥getshell 2.ssh shell中runas切换用户) 1.nmap扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap -sV -sC -p- 192.168.161.179 --min-rate 2000 Starting Nmap 7.92 ( https://nmap.org ) at 2024-02-29 07:14 EST…...

【嵌入式——QT】日期与定时器

日期 QTime&#xff1a;时间数据类型&#xff0c;仅表示时间&#xff0c;如 16:16:16&#xff1b;QDate&#xff1a;日期数据类型&#xff0c;仅表示日期&#xff0c;如2024-1-22&#xff1b;QDateTime&#xff1a;日期时间数据类型&#xff0c;表示日期和时间&#xff0c;如2…...

如何决定使用HashMap还是TreeMap?

使用 HashMap 还是 TreeMap 取决于你的需求和对数据结构的理解。 HashMap&#xff1a; 快速插入和查找&#xff1a;HashMap 提供了常数时间&#xff08;O(1)&#xff09;的插入和查找操作&#xff0c;因此对于需要快速插入和查找的场景非常适用。无序性&#xff1a;HashMap 不保…...

平台工程与安全

平台工程不是为了取代DevOps&#xff0c;而是DevOps的进一步演进和发展。本文介绍了DevOps和平台工程&#xff0c;以及对于安全的意义。原文: Platform Engineering and Security: A Very Short Introduction 中国云南大理的日落 我是一名 DevOps 工程师&#xff0c;个人还是希…...

智能咖啡厅助手:人形机器人 +融合大模型,行为驱动的智能咖啡厅机器人(机器人大模型与具身智能挑战赛)

智能咖啡厅助手&#xff1a;人形机器人 融合大模型&#xff0c;行为驱动的智能咖啡厅机器人(机器人大模型与具身智能挑战赛) “机器人大模型与具身智能挑战赛”的参赛作品。的目标是结合前沿的大模型技术和具身智能技术&#xff0c;开发能在模拟的咖啡厅场景中承担服务员角色并…...

js处理IOS虚拟键盘弹出后输入框被遮住

​ JS IOS 前言 在项目开发的过程中&#xff0c;在IOS手机端系统下&#xff0c;当对输入框&#xff08;input/textarea&#xff09;进行focus操作时&#xff0c;键盘弹起遮住输入框。 问题描述 从页面底部focus输入框失败从页面中间focus输入框失败 原因 造成上述问题的&…...

脚手架工程使用ElementUI

在终端中执行以下指令 npm install --save element-ui 在终端中显示added 9 packages in 10s 说明安装完成 在工程的main.js中 导入并使用ElementUI: import ElementUI from element-ui import element-ui/lib/theme-chalk/index.css Vue.use(ElementUI) 可以在*.vue页面中…...

163邮箱SMTP端口号及服务器地址详细设置?

163邮箱SMTP端口号是什么&#xff1f;163邮件SMTP设置教程&#xff1f; 除了基本的邮箱账号和密码外&#xff0c;还需要了解SMTP服务器地址和端口号&#xff0c;以及相应的设置。这些设置对于确保邮件能够顺利发送至关重要。下面&#xff0c;蜂邮EDM将详细介绍163邮箱SMTP端口…...

【STM32】STM32学习笔记-独立看门狗和窗口看门狗(47)

00. 目录 文章目录 00. 目录01. WDG概述02. 独立看门狗相关API2.1 IWDG_WriteAccessCmd2.2 IWDG_SetPrescaler2.3 IWDG_SetReload2.4 IWDG_ReloadCounter2.5 IWDG_Enable2.6 IWDG_GetFlagStatus2.7 RCC_GetFlagStatus 03. 独立看门狗接线图04. 独立看门狗程序示例105. 独立看门…...

计算机网络——IPV4数字报

1. IPv4数据报的结构 本结构遵循的是RFC 791规范&#xff0c;介绍了一个IPv4数据包头部的不同字段。 1.1 IPv4头部 a. 版本&#xff08;Version&#xff09;&#xff1a;指明了IP协议的版本&#xff0c;IPv4表示为4。 b. 头部长度&#xff08;IHL, Internet Header Length&…...

java抽象方法和抽象类

1、抽象方法 如果父类的方法本身不需要实现任何功能&#xff0c;仅仅是为了定义方法签名&#xff0c;目的是让子类去覆盖它&#xff0c;那么&#xff0c;可以把父类的方法声明为抽象方法。 class Person { // 定义抽象方法public abstract void run(); } 把一个方法声明为a…...

echarts鼠标向右/向左绘制实现放大/还原

echarts toolbox 的datazoom提供了绘制放大的功能&#xff0c;但通过鼠标绘制只能进行放大 应需求放大与还原都通过鼠标行为实现&#xff0c;增加从右往左绘制时还原放大结果 demo 结果 重写datazoom的原型方法实现绘制事件的拦截 const comp myChart._model.getComponent(to…...

Qwen2.5-72B-GPTQ-Int4惊艳效果:多轮数学证明生成+中间步骤可追溯展示

Qwen2.5-72B-GPTQ-Int4惊艳效果&#xff1a;多轮数学证明生成中间步骤可追溯展示 1. 引言&#xff1a;当大模型遇上数学推理 如果你尝试过让AI帮你解决数学问题&#xff0c;可能会遇到这样的困扰&#xff1a;它要么直接给出一个最终答案&#xff0c;让你摸不着头脑&#xff1…...

从Transformer到SASRec:图解自注意力如何重塑序列推荐系统

从Transformer到SASRec&#xff1a;图解自注意力如何重塑序列推荐系统 想象一下&#xff0c;当你在电商平台浏览商品时&#xff0c;系统仿佛能读懂你的心思&#xff0c;精准推荐你下一步可能感兴趣的内容。这背后隐藏着一个关键技术——自注意力机制。2018年&#xff0c;一篇名…...

SKILL语言实战指南:数字IC设计中的自动化利器

1. SKILL语言&#xff1a;数字IC设计的瑞士军刀 第一次接触SKILL语言是在十年前的一个芯片设计项目里&#xff0c;当时需要手动修改上千个标准单元的布局参数。我的mentor看我对着电脑屏幕发呆&#xff0c;随手扔过来几行SKILL脚本&#xff1a;"试试这个&#xff0c;比你点…...

阵列信号处理实战:从均匀线阵到波束方向图的关键参数解析

1. 均匀线阵的基础原理与工程实现 第一次接触均匀线阵(Uniform Linear Array)时&#xff0c;我被它简洁的数学模型和强大的物理意义所震撼。这种由N个等间距排列的传感器组成的阵列&#xff0c;在雷达、声纳和无线通信系统中有着广泛应用。最让我印象深刻的是&#xff0c;虽然理…...

Qwen3-ForcedAligner-0.6B多场景落地:无障碍服务为听障人士生成精准字幕流

Qwen3-ForcedAligner-0.6B多场景落地&#xff1a;无障碍服务为听障人士生成精准字幕流 1. 引言&#xff1a;让音频内容"看得见"的技术突破 想象一下这样的场景&#xff1a;一位听障朋友正在观看视频课程&#xff0c;虽然视频有字幕&#xff0c;但字幕与语音不同步&…...

QLabel的四种内容呈现模式

1. QLabel的多面手特性&#xff1a;不只是显示文字 第一次接触Qt开发时&#xff0c;很多人会把QLabel简单理解为一个"文字标签控件"。直到我在实际项目中需要显示动态图表时&#xff0c;才发现这个看似简单的控件竟然藏着这么多玩法。QLabel本质上是一个多功能显示容…...

HW攻防演练实战:深度剖析Webshell与内存马的流量指纹与自动化查杀

1. 从零认识Webshell与内存马 第一次接触"Webshell"这个词时&#xff0c;我还以为是什么新型的贝壳类生物。后来才知道&#xff0c;这其实是黑客最常用的"后门工具"之一。简单来说&#xff0c;Webshell就是一段能通过网页形式执行的恶意代码&#xff0c;它…...

2026最新大模型学习路线图!小白也能轻松入门,掌握AI风口技能,高薪offer等你拿!

大模型目前在人工智能领域可以说正处于一种“炙手可热”的状态&#xff0c;吸引了很多人的关注和兴趣&#xff0c;也有很多新人小白想要学习入门大模型&#xff0c;那么&#xff0c;如何入门大模型呢&#xff1f;下面给大家分享一份2025最新版的大模型学习路线&#xff0c;帮助…...

机器阅读理解:抽取式问答、多选问答与自由生成问答

点击 “AladdinEdu&#xff0c;你的AI学习实践工作坊”&#xff0c;注册即送-H卡级别算力&#xff0c;沉浸式云原生集成开发环境&#xff0c;80G大显存多卡并行&#xff0c;按量弹性计费&#xff0c;教育用户更享超低价。 一、引言 让机器阅读并理解人类语言&#xff0c;是人工…...

如何快速解密SWF文件:JPEXS逆向工具的完整指南

如何快速解密SWF文件&#xff1a;JPEXS逆向工具的完整指南 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler JPEXS Free Flash Decompiler是一款专业的开源SWF解密工具&#xff0c;专门用…...