当前位置: 首页 > 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…...

用户体验测试可用性与可访问性

用户体验测试&#xff1a;可用性与可访问性的核心实践 在数字化时代&#xff0c;产品能否成功往往取决于用户体验的优劣。可用性与可访问性作为用户体验的核心要素&#xff0c;直接影响用户对产品的满意度与忠诚度。可用性关注产品是否易于使用&#xff0c;而可访问性则确保所…...

Clawdbot+Qwen3:32B问题解决:Token缺失报错一键修复

ClawdbotQwen3:32B问题解决&#xff1a;Token缺失报错一键修复 1. 问题现象与快速诊断 当你首次启动Clawdbot整合qwen3:32b镜像并尝试访问控制台时&#xff0c;可能会遇到以下报错&#xff1a; disconnected (1008): unauthorized: gateway token missing (open a tokenized…...

泛素酶:泛素化研究的基石,PROTAC开发的核心

泛素酶与PROTAC蛋白质作为生命活动的主要承担者&#xff0c;在完成使命后需要及时启动降解和清除。如果在这个过程中出现问题&#xff0c;就会引发一系列疾病&#xff0c;最典型的当属神经退行性疾病&#xff0c;如阿尔茨海默症、帕金森、亨廷顿病等。人体细胞降解蛋白质的主要…...

Linux CFS 的 nr_switches:上下文切换次数统计

简介在Linux内核的进程调度体系中&#xff0c;完全公平调度器&#xff08;Completely Fair Scheduler, CFS&#xff09;自2.6.23版本引入以来&#xff0c;一直是通用操作系统环境下的默认调度策略。对于从事系统性能优化、容器化资源管控或实时系统设计的工程师而言&#xff0c…...

CSS如何根据多语言标记修改字体_使用[lang=‘zh-CN’]属性选择器

[langzh-CN] 本身不改变字体&#xff0c;必须配合 font-family 声明且指定中文字体&#xff1b;需确保元素含正确 lang 属性、字体列表含中文字体并前置、避免单一字体依赖&#xff0c;优先用属性选择器而非 :lang()。用 [langzh-CN] 选中中文内容时&#xff0c;为什么字体没变…...

JAVA智能配电房管理系统源码:含数据字典、完整文档及多种功能实现

JAVA智能配电房管理系统源码带数据字典及完整文档JAVA智能配电房管理系统源码带数据字典及完整文档实现各模块数据显示&#xff0c;报警显示&#xff0c;报表导出功能。 此次监控的电力系统有两个配电房&#xff0c;总共四个变压器&#xff0c;54条供电线路。 能通过电路拓扑图…...

从一次应急响应看致远OA wpsAssistServlet漏洞:攻击者如何利用,我们又该如何溯源与加固?

企业级致远OA安全事件深度剖析&#xff1a;从漏洞利用到防御体系构建 凌晨3点17分&#xff0c;安全运维工程师小李的手机突然响起刺耳的告警声——公司核心业务区的致远OA服务器触发了异常文件上传行为告警。当他远程连接到安全分析平台时&#xff0c;发现攻击者已经通过wpsAss…...

P1618三连击 (暴力+枚举)

P1618 三连击&#xff08;升级版&#xff09; 题目描述 将 1,2,…,91, 2,\ldots, 91,2,…,9 共 999 个数分成三组&#xff0c;分别组成三个三位数&#xff0c;且使这三个三位数的比例是 A:B:CA:B:CA:B:C&#xff0c;试求出所有满足条件的三个三位数&#xff0c;若无解&#xff…...

mysql如何设计积分系统_mysql流水账与余额对账

流水表必须带唯一业务单号trade_no并建唯一索引&#xff0c;用INSERT IGNORE或ON DUPLICATE KEY UPDATE防重&#xff1b;余额统一用BIGINT存最小单位&#xff0c;所有增减走原子UPDATE&#xff1b;对账分实时&#xff08;查最近N条&#xff09;与离线&#xff08;每日全量SUM比…...

别再只用TODO了!聊聊Qt Creator和VS里那些被忽略的注释标签(FIXME、NOTE、BUG实战)

别再只用TODO了&#xff01;聊聊Qt Creator和VS里那些被忽略的注释标签&#xff08;FIXME、NOTE、BUG实战&#xff09; 在代码的海洋里航行时&#xff0c;TODO就像是最显眼的浮标——但你是否想过&#xff0c;这片海域其实还有更多专业的导航标记&#xff1f;当项目规模从个人玩…...