L3-011 直捣黄龙 (30分)
本题是一部战争大片 —— 你需要从己方大本营出发,一路攻城略地杀到敌方大本营。首先时间就是生命,所以你必须选择合适的路径,以最快的速度占领敌方大本营。当这样的路径不唯一时,要求选择可以沿途解放最多城镇的路径。若这样的路径也不唯一,则选择可以有效杀伤最多敌军的路径。

输入格式:
输入第一行给出 2 个正整数 N(2 ≤ N ≤ 200,城镇总数)和 K(城镇间道路条数),以及己方大本营和敌方大本营的代号。随后 N-1 行,每行给出除了己方大本营外的一个城镇的代号和驻守的敌军数量,其间以空格分隔。再后面有 K 行,每行按格式城镇1 城镇2 距离给出两个城镇之间道路的长度。这里设每个城镇(包括双方大本营)的代号是由 3 个大写英文字母组成的字符串。

输出格式:
按照题目要求找到最合适的进攻路径(题目保证速度最快、解放最多、杀伤最强的路径是唯一的),并在第一行按照格式己方大本营->城镇1->…->敌方大本营输出。第二行顺序输出最快进攻路径的条数、最短进攻距离、歼敌总数,其间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:

10 12 PAT DBY
DBY 100
PTA 20
PDS 90
PMS 40
TAP 50
ATP 200
LNN 80
LAO 30
LON 70
PAT PTA 10
PAT PMS 10
PAT ATP 20
PAT LNN 10
LNN LAO 10
LAO LON 10
LON DBY 10
PMS TAP 10
TAP DBY 10
DBY PDS 10
PDS PTA 10
DBY ATP 10

输出样例:

PAT->PTA->PDS->DBY
3 30 210

#include<bits/stdc++.h>
using namespace std;
int M;
const int maxn=100000;
const int inf=10000000;
struct node{int to,len,next;
}edge[maxn];
int head[maxn];
void insert(int from,int to,int len){M++;edge[M].to=to;edge[M].len=len;edge[M].next=head[from];head[from]=M;
}
int mili[maxn];
map<string ,int >num;
map<int ,string >name;
int n,m;
string fri,ana;
int pre[maxn];
int dis[maxn];
int coun[maxn];
int kill[maxn];
bool isin[maxn];
void dij(int from){for(int a=0;a<n;a++){isin[a]=false;dis[a]=inf;}for(int a=head[from];a!=0;a=edge[a].next){int to=edge[a].to;int len=edge[a].len;kill[to]=mili[to];coun[to]=1;dis[to]=len;pre[to]=from;}isin[from]=true;coun[from]=0;pre[from]=-1;for(int i=0;i<n;i++){int point=-1;int min=inf;for(int a=0;a<n;a++){if(!isin[a]&& dis[a]<min){min=dis[a];point=a;}}if(point==-1)return ;isin[point]=true;for(int a=head[point];a!=0;a=edge[a].next){int to=edge[a].to;int len=edge[a].len;if(!isin[to]){if(dis[point]+len< dis[to]){pre[to]=point;dis[to]=len+dis[point];kill[to]=kill[point]+mili[to];coun[to]=coun[point]+1;}else if(dis[point]+len==dis[to]&& coun[point]+1> coun[to]){pre[to]=point;coun[to]=coun[point]+1;kill[to]=kill[point]+mili[to];}else if(dis[point]+len==dis[to]&& coun[point]+1== coun[to]&& kill[point]+mili[to]>kill[to]){kill[to]=kill[point]+mili[to];pre[to]=point;}}}}
}
main(){cin>>n>>m;cin>>fri>>ana;num[fri]=0;/// 大本营是0号name[0]=fri;for(int a=1;a<n;a++){string str;int n;cin>>str>>n;num[str]=a;name[a]=str;mili[a]=n;}for(int a=0;a<m;a++){string s1,s2;int len;cin>>s1>>s2>>len;int n1=num[s1];int n2=num[s2];insert(n1,n2,len);insert(n2,n1,len);}dij(0);int n=num[ana];stack<int >sta;sta.push(n);int p=pre[n];while(p!=-1){sta.push(p);p=pre[p];}cout<<name[sta.top()];sta.pop();while(!sta.empty()){cout<<"->"<<name[sta.top()];sta.pop();}cout<<endl;cout<<coun[n]<<' '<<dis[n]<<' '<<kill[n];
}

  • 一旦明白了两个关键字的最短路径,更多关键字也能明白,
  • 但是这个代码在PTA上编译不过去,我也不想再改代码了,我写的很清晰,大家一定要分享一下

马上要参加天梯赛分享优质题目-L3-011 直捣黄龙 (30分)---三个关键字的最短路径算法相关推荐

  1. 2020年团体程序设计天梯赛 L3-1 那就别担心了 (30分)

    下图转自"英式没品笑话百科"的新浪微博 -- 所以无论有没有遇到难题,其实都不用担心. 博主将这种逻辑推演称为"逻辑自洽",即从某个命题出发的所有推理路径都会将 ...

  2. 【团体天梯赛/PTA】7-34 福到了 (15 分)

    [团体天梯赛/PTA]7-34 福到了 (15 分) "福"字倒着贴,寓意"福到".不论到底算不算民俗,本题且请你编写程序,把各种汉字倒过来输出.这里要处理的每 ...

  3. CCCC 天梯赛 PTA ZOJ 题目 L1 L2 L3

    PTA 天梯赛题目整理 L2 难点 **L2-001 紧急救援** **L2-002 链表去重** **L2-003 月饼** **L2-004 这是二叉搜索树吗** **L2-005 集合相似度** ...

  4. 2020天梯赛训练1 题目整理

    7-1 比较大小 (10分) 题目链接: 7-1 比较大小 代码如下: import java.util.Arrays; import java.util.Scanner;public class M ...

  5. 天梯赛(2020题目集)

    L1-吃火锅 以上图片来自微信朋友圈:这种天气你有什么破事打电话给我基本没用.但是如果你说"吃火锅",那就厉害了,我们的故事就开始了. 本题要求你实现一个程序,自动检查你朋友给你发 ...

  6. 2020团队天梯赛-正赛-L1题目集

    L1题目集 L1-01 嫑废话 上代码 (5分得5分) L1-02 猫是液体(5分得5分) L1-03 洛希极限(10分得10分) L1-04 调和平均(10分得9分) L1-05 胎压监测(15分得 ...

  7. 2023 HBU 天梯赛第一次测试 题目集

    目录 1 建校日期 2 发射小球 3 背上书包去旅行 4 吉利的数字 5 向前走 6 热水器 7 走方格 8 朋友圈 9 交保护费 10 走方格 11 和与积 12 缩短字符串 13 买木棒 1 建校 ...

  8. 团体程序设计天梯赛-练习集L1-025 正整数A+B (15分)(getline输入)

    题目: 题的目标很简单,就是求两个正整数A和B的和,其中A和B都在区间[1,1000].稍微有点麻烦的是,输入并不保证是两个正整数. 输入格式: 输入在一行给出A和B,其间以空格分开.问题是A和B不一 ...

  9. L3-011 直捣黄龙 (30 分)-PAT 团体程序设计天梯赛 GPLT

    本题是一部战争大片 -- 你需要从己方大本营出发,一路攻城略地杀到敌方大本营.首先时间就是生命,所以你必须选择合适的路径,以最快的速度占领敌方大本营.当这样的路径不唯一时,要求选择可以沿途解放最多城镇 ...

最新文章

  1. 达摩院首席数据库科学家李飞飞:云原生新战场,我们如何把握先机?
  2. UNIX中的文件控制--fcntl()
  3. 不同Activity之间传递数据--Bundle对象和startActivityForResult方法的实现
  4. python打开界面是什么样的-python学习笔记(图形用户界面)
  5. 一文搞清到底什么是 .NET?
  6. 前端学习(2458):素材管理
  7. 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax 发出异步请求
  8. (94)Verilog HDL系统函数和任务:$ferror
  9. [转贴]壮观啊!实拍中国最美公路
  10. 如何在WP7中使用自定义字体
  11. 高效而轻松的sed命令
  12. paip.android APK安装方法大总结系统应用的安装
  13. 基频和倍频的概念_倍频技术
  14. RobotStudio 机器人的直线运动控制
  15. 股票做空和做多是什么意思
  16. usb驱动文件_我的USB驱动器应使用什么文件系统?
  17. 北大软件“软件成分分析与漏洞检测工具”(CoBOT—SCA)正式发布
  18. 计算机网络里面ap是什么,无线AP是什么
  19. 做自适应网站专业乐云seo_自适应网站软件专注乐云seo
  20. 推荐一款基于docker部署的个人免费笔记工具wiznote

热门文章

  1. 杭电嵌入式课程设计——上位机
  2. Qt for MCUs 1.9正式发布
  3. 先电iaaS云计算基础服务平台部署
  4. vue中使用quill富文本编辑器
  5. signature=b5d482f98802c3bc661cc82639edaa27,Taro
  6. 视频讲解|KLTS -- K8s 长期维护支持版本
  7. python列表增加行_python怎么在数组添加一行?
  8. 【青梅快讯】Greenplum 最新版本6.20.3已正式发布
  9. 微信公众号消息推送,注册成功,支付成功,积分余额变化
  10. Kuick:创业大军中脱颖而出的少数派