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

摘要:
农民约翰按响了电铃,所以她们开始向谷仓走去。你的工作是要指出哪只母牛会最先到达谷仓。有时,两个牧场之间会有超过一条道路相连。至少有一个牧场和谷仓之间有道路连接。因此,所有的母牛最后都能到达谷仓,并且母牛总是走最短的路径。谷仓的标记是'Z',注意没有母牛在谷仓中。告诉我setof咋用就不郁闷了…输入输出样例输入样例#1:5Ad6Bd3Ce9dZ8eZ3输出样例#1:B11说明翻译来自NOCOWUSACO2.4代码1#include2#include3#include4#include5#include6#include7#include8#defineMAXN300059#defineINF0x3f3f3f3f10usingnamespacestd;1112mapm;13vectorG[MAXN],c[MAXN];14intM,dis[MAXN],vis[MAXN];1516structcc{intnum,d;};17ccmake{cca;a.num=num;a.d=d;returna;}18structcmp{booloperator(){returna.d˃b.d;}};19inttrans{returnm[a];}2021voidinit_(){22intj=1;for{m[i]=j;}23j=30;for{m[i]=j;}24scanf;2526for{27chara,b;intw;//格式化输入???q.empty()){41intx=q.top().num;q.pop();42ifcontinue;vis[x]=1;43//puts("@");44for{45intto=G[x][i];46if{47dis[to]=dis[x]+c[x][i];48q.push;49}50}51}52}5354voidwork(){55Dijkstra();56charans_num;intans_step=INF;5758for59if60ans_num=i,ans_step=dis[trans];6162cout˂˂ans_num˂˂""˂˂ans_step˂˂endl;63}6465intmain(){66//freopen;//freopen;6768init_();69work();7071fclose;fclose;return0;72}回顾了一下最短路+map的神奇组合

题目描述

现在是晚餐时间,而母牛们在外面分散的牧场中。 农民约翰按响了电铃,所以她们开始向谷仓走去。 你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数据中,总会有且只有一只最快的母牛)。 在挤奶的时候(晚餐前),每只母牛都在她自己的牧场上,一些牧场上可能没有母牛。 每个牧场由一条条道路和一个或多个牧场连接(可能包括自己)。 有时,两个牧场(可能是字母相同的)之间会有超过一条道路相连。 至少有一个牧场和谷仓之间有道路连接。 因此,所有的母牛最后都能到达谷仓,并且母牛总是走最短的路径。 当然,母牛能向着任意一方向前进,并且她们以相同的速度前进。 牧场被标记为'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 namespacestd;
11 
12 map<char,int>m;
13 vector<int>G[MAXN],c[MAXN];
14 intM,dis[MAXN],vis[MAXN];
15 
16 struct cc{intnum,d;};
17 cc make(int num,int d){cc a;a.num=num;a.d=d;returna;}
18 struct cmp{bool operator()(cc a,cc b){return a.d>b.d;}};
19 int trans(char a){returnm[a];}
20 
21 voidinit_(){
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 voidDijkstra(){
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 voidwork(){
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 intmain(){
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 的神奇组合

免责声明:文章转载自《洛谷 P1529 回家 Bessie Come Home Label:Dijkstra最短路 &amp;amp;&amp;amp; 乱搞》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MySql与Java的时间类型笔记4:IIS6发布网站后“对XX路径的访问被拒绝”下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

全网最详细的最新稳定OSSEC搭建部署(ossec-server(CentOS7.X)和ossec-agent(CentOS7.X))(图文详解)

OSSEC是一款开源的基于主机的入侵检测系统,可以简称为HIDS。它具备日志分析,文件完整性检查,策略监控,rootkit检测,实时报警以及联动响应等功能。详细的介绍和文档可以参考官网网站:http://www.ossec.net/环境本文中的环境极其简单,两台CentOS7虚拟机。CentOS7的安装详解服务端:  计算机名:ossec-server  I...

JRebel 6 破解版及使用方法

2.解压下载的jrebel6.0.0-crack.zip、jrebel6.0 jar包和破解文件。假设文件在D:/jrebel步骤:1中解压缩。eclipse下载jrebe插件,可以在市场上下载。2.打开eclipse的窗口首选项jrebel,打开优势选项卡,并将jar包的路径指向D:/jrebel/jrebel.jar。用CMD打开DOS窗口,输入cd/d...

tomcat不打印日志的原因及解决办法

tomcat的日志在刚启动的时候可以正常打印,系统正常运行几天以后就会出现不打印日志或者日志打印的内容缺少的情况,但是系统还是可以正常使用的,重启tomcat以后日志打印就又正常了,请问一下这是什么原因呢?日志框架使用的是log4j,使用了日志按天分割,每天的日志量是5G左右1.下载日志jar包,例如:commons-logging-1.1.1.jar。放在...

mac 安装xcode命令行工具

重印:https://segmentfault.com/a/1190000018045211?utm_source=tag-Newest1.启动终端,输入命令:xcode select--install,然后一直单击install。2.安装成功后,输入命令:gcc-v以检查是否成功。如果在第一步中报告了错误,提示为:xcode select:error:co...

win server2008关闭危险端口445,135,137,138,139的方法

在Windowsserver2008系统上,有两种途经可以禁用本地端口:1、通过Windows防火墙2、通过IP安全策略一、通过Windows防火墙禁用端口:1、点击“控制面板-Windows防火墙”,确保启用了Windows防火墙。重复操作,添加135、137、138、139规则然后在新规则属性中,单击筛选器操作选项卡单击下方的添加,并且不要勾选右侧的使用...

uni.showModal,uni.showToast使用

uni.showModal({title:'提示',content:'您已参加并通过本次考试,是否再次进行考试?...