洛谷 P1529 回家 Bessie Come Home Label:Dijkstra最短路 乱搞

题目描述

现在是晚餐时间,而母牛们在外面分散的牧场中。 农民约翰按响了电铃,所以她们开始向谷仓走去。 你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数据中,总会有且只有一只最快的母牛)。 在挤奶的时候(晚餐前),每只母牛都在她自己的牧场上,一些牧场上可能没有母牛。 每个牧场由一条条道路和一个或多个牧场连接(可能包括自己)。 有时,两个牧场(可能是字母相同的)之间会有超过一条道路相连。 至少有一个牧场和谷仓之间有道路连接。 因此,所有的母牛最后都能到达谷仓,并且母牛总是走最短的路径。 当然,母牛能向着任意一方向前进,并且她们以相同的速度前进。 牧场被标记为'a'..'z'和'A'..'Y',在用大写字母表示的牧场中有一只母牛,小写字母中则没有。 谷仓的标记是'Z',注意没有母牛在谷仓中。

注意'm'和'M'不是同一个牧场 否则错误 上面的意思是说:输入数据中可能会同时存在M,m(郁闷ing)(PS:表郁闷…告诉我set of咋用就不郁闷了…),比如

M a a m m z

输入输出格式

输入格式:

 

第 1 行: 整数 P(1<= P<=10000),表示连接牧场(谷仓)的道路的数目。

第 2 ..P+1行: 用空格分开的两个字母和一个整数:

被道路连接牧场的标记和道路的长度(1<=长度<=1000)。

 

输出格式:

 

单独的一行包含二个项目: 最先到达谷仓的母牛所在的牧场的标记,和这只母牛走过的路径的长度。

 

输入输出样例

输入样例#1:
5
A d 6
B d 3
C e 9
d Z 8
e Z 3
输出样例#1:
B 11

说明

翻译来自NOCOW

USACO 2.4

代码

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<vector>
 6 #include<queue>
 7 #include<map>
 8 #define MAXN 30005
 9 #define INF 0x3f3f3f3f
10 using namespace std;
11 
12 map<char,int> m;
13 vector<int> G[MAXN],c[MAXN];
14 int M,dis[MAXN],vis[MAXN];
15 
16 struct cc{int num,d;};
17 cc make(int num,int d){cc a;a.num=num;a.d=d;return a;}
18 struct cmp{bool operator()(cc a,cc b){return a.d>b.d;}};
19 int trans(char a){return m[a];}
20 
21 void init_(){
22     int j=1;    for(char i='a';i<='z';i++,j++){m[i]=j;}
23         j=30;    for(char i='A';i<='Z';i++,j++){m[i]=j;}
24     scanf("%d",&M);
25     
26     for(int i=1;i<=M;i++){
27         char a,b;int w;//格式化输入??? 
28         cin>>a>>b>>w;
29         G[trans(a)].push_back(trans(b));c[trans(a)].push_back(w);
30         G[trans(b)].push_back(trans(a));c[trans(b)].push_back(w);
31     }
32 }
33 
34 
35 void Dijkstra(){
36     priority_queue<cc,vector<cc>,cmp> q;
37     memset(dis,0x3f,sizeof(dis));
38     int s=trans('Z');
39     dis[s]=0;q.push(make(s,0));
40     while(!q.empty()){
41         int x=q.top().num;q.pop();
42         if(vis[x]) continue;vis[x]=1;
43 //        puts("@");
44         for(int i=0;i<G[x].size();i++){
45             int to=G[x][i];
46             if(dis[x]+c[x][i]<dis[to]){
47                 dis[to]=dis[x]+c[x][i];
48                 q.push(make(to,dis[to]));
49             }
50         }
51     }
52 }
53 
54 void work(){
55     Dijkstra();
56     char ans_num;int ans_step=INF;
57     
58     for(char i='A';i<'Z';i++)
59         if(dis[trans(i)]<ans_step)
60             ans_num=i,ans_step=dis[trans(i)];
61 
62     cout<<ans_num<<" "<<ans_step<<endl;
63 }
64 
65 int main(){
66 //    freopen("01.in","r",stdin);//freopen("01.out","w",stdout);
67     
68     init_();
69     work();
70     
71     fclose(stdin);fclose(stdout);return 0;
72 }

回顾了一下 最短路+map 的神奇组合

转载于:https://www.cnblogs.com/radiumlrb/p/6048897.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397443.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux语言的说明顺序有哪些,(linux常用头文件详解.doc

(linux常用头文件详解linux常用头文件详解POSIX标准定义的头文件??????? 目录项???????? 文件控制??? 文件名匹配类型??? 路径名模式匹配类型??????? 组文件??? 网络数据库操作??????? 口令文件??? 正则表达式??????? TAR归档…

第 39 章 ThinkPHP--视图

学习要点&#xff1a; 1.模版定义 2.赋值和渲染 3.模版地址 4.获取内容 本节课&#xff0c;我们将要学习一下 ThinkPHP 视图&#xff0c;视图是 Web 的可见内容&#xff0c;一般是 HTML 结合 PHP 获取的数据提供给用户使用的部分&#xff0c;属于 MVC 中的 V。 一&#xff0e;模…

mysql日志(介绍 路径修改 备份)

2019独角兽企业重金招聘Python工程师标准>>> 环境&#xff1a;senos6 软件&#xff1a;mysql2.6.20 mysql日志&#xff1a; 错误日志 一般查询日志 慢查询日志 二进制日志 只记录DDL&#xff0c;DML等引起数据库改变的操作都会记录下来 复制&am…

Sort

<?xml version"1.0" encoding"utf-8"?> SortSort 1 Sort Select sort is the simplest sorting alogrithms. 1.1 IDEA 1.find the smallest element in the rest of array 2.exchange the element with with the i th entry. 3.repeat step1 and s…

a标签实现不跳转点击

<a class"tiao" href"./index.php"></a> JS实现无跳转a标签 <script type"text/javascript"> $(".tiao").click(function (){return false; }) </script> 转载于:https://www.cnblogs.com/wenhainan/p/…

linux下的c语言控制灯闪烁,C语言实现LED灯闪烁控制

原标题&#xff1a;C语言实现LED灯闪烁控制/********* 配套 **********/#include //包含 寄存器的头文件/****************************************函数功能&#xff1a;延时一段时间*****************************************/void delay(void) //两个void意思分别为无需返回…

VBA and Access

>>.用vba连接ACESS&#xff1a; Set Conn Server.CreateObject("ADODB.Connection") Conn.ConnectionString"ProviderMicrosoft.Jet.OLEDB.4.0;Data Source" & Server.MapPath("sample.mdb") Conn.Open>>.用vba连接EXCEL,打开EX…

温州大学c语言作业布置的网站,老师APP上布置作业 三年级娃为刷排名半夜做题_央广网...

在温州读小学三年级的皮皮(化名)&#xff0c;因为学习需要&#xff0c;在妈妈黄女士的手机里安装了5个APP学习软件。有数学速算的&#xff0c;英语配音的&#xff0c;还有语文复习的。这些软件&#xff0c;都是班上的老师推荐安装的。每天放学回家&#xff0c;皮皮就拿着黄女士…

Algorithm I assignment Collinear

这本来应该是第三周的作业&#xff0c;但是由于其他作业逼近deadline&#xff0c;暂时推后了一周完成。 这周的assignment大大提高了我对这门课的看法&#xff0c;不得不说&#xff0c;Algorithms这门课的assignment部分设计得很好。为什么好&#xff1f;个人认为有以下几点&am…

vc c语言坐标图,VC++6.0下C语言画图编程问题

复制内容到剪贴板代码:#include#includevoid CSinusoidView::OnDraw(CDC* pDC){CSinusoidDoc* pDoc GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data here//建立画笔CPen cpen,pen;pen.CreatePen(PS_SOLID,4,RGB(0,0,0));cpen.CreatePen(PS_SOLID,2…

Java BigDecimal详解

1.引言 float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算&#xff0c;这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而&#xff0c;它们没有提供完全精确的结果&#xff0c;所以不应该被用于要求精确结果的场合。但是…

Erlang库 -- 有意思的库汇总

抄自这里 首先&#xff0c;库存在的目的大致可分为&#xff1a;1、提供便利2、尽可能解决一些痛点首先&#xff0c;我们先明确一下Erlang编程语言的一些痛点&#xff08;伪痛点&#xff09;&#xff1a;1&#xff0c;单进程问题Erlang虚拟机属于抢占式调度&#xff0c;抢占式调…

windows 串口编程 c语言,windows下C语言版串口发送程序(基于VS2017)

#include "tchar.h"#include int main(){/*****************************打开串口*************************************/HANDLE hCom;//全局变量&#xff0c;串口句柄hCom CreateFile(_T("COM3"),//COM3口GENERIC_READ | GENERIC_WRITE,//允许读和写0,/…

scikit-learn决策树算法类库使用小结

之前对决策树的算法原理做了总结&#xff0c;包括决策树算法原理(上)和决策树算法原理(下)。今天就从实践的角度来介绍决策树算法&#xff0c;主要是讲解使用scikit-learn来跑决策树算法&#xff0c;结果的可视化以及一些参数调参的关键点。 1. scikit-learn决策树算法类库介绍…

3.js模式-策略模式

1. 策略模式 策略模式定义一系列的算法&#xff0c;把它们封装起来&#xff0c;并且可以互相替换。 var strategies { isNonEmpty: function(value,errMsg){ if(value ){ return errMsg; } }, minLength:function(value,length,errMsg){ if(value.length < length){ retur…

c语言编写程序求8,使用c语言编写程式,实现计算1*2*3+4*5*6+7*8*9+……+28*29*30的值...

使用c语言编写程式&#xff0c;实现计算1*2*34*5*67*8*9……28*29*30的值以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;使用c语言编写程式&#xff0c;实现计算1*2*34*5*67*8*9……28*29*3…

PHP 正则表达式分割 preg_split 与 split 函数

为什么80%的码农都做不了架构师&#xff1f;>>> preg_split() preg_ split() 函数用于正则表达式分割字符串。 语法&#xff1a; array preg_split( string pattern, string subject [, int limit [, int flags]] ) 返回一个数组&#xff0c;包含 subject 中沿着与…

简单学C——第五天

结构体 首先明确&#xff0c;结构体是一种构造的数据类型&#xff0c;是一种由多个数据类型如 int&#xff0c;char&#xff0c;double&#xff0c;数组或者结构体......组成的类型,现在告诉大家如何定义一个结构体。在定义int整型变量时&#xff0c;大家肯定都知道 int a; 即…

C语言二叉树实验报告流程图,二叉树的建立与遍历实验报告(c语言编写,附源代码).doc...

二叉树的建立与遍历实验报告(c语言编写,附源代码).doc第 1 页&#xff0c;共 9 页二叉树的建立与遍历实验报告级 班 年 月 日 姓名 学号_ 1实验题目建立一棵二叉树&#xff0c;并对其进行遍历(先序、中序、后序)&#xff0c;打印输出遍历结果。2需求分析本程序用 VC 编写&#…

三角函数泰勒展开C语言,第六章-函数作业 ---三角函数泰勒级数展开式计算正弦函数值...

E201_06_02_正弦函数题目要求&#xff1a;按照三角函数泰勒级数展开式计算正弦函数值&#xff1a;,直到最后一项的绝对值小于106解题思路&#xff1a;1. 输入弧度2. 确定初始化值3. 求阶梯函数代码&#xff1a;public class E201_06_02_正弦函数 {public static void main(Stri…