题目描述

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

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

  1. 洛谷 P3003 [USACO10DEC]苹果交货Apple Delivery dijkstra 最短路

    题目链接: https://www.luogu.org/problem/P3003 思路: 1:最短路水题,dijkstra AC 2:spfa 10个测试点过8个,2个TLE 代码: 1:dijks ...

  2. 洛谷:P2832 行路难(堆优化Dijkstra(错解)bfs(正解) + 记录路径)

    洛谷:P2832 行路难 写这道题确实是行路难- 此题的最短路约束不只是边权,还有边数(每经过一条边,之后经过的边权值都 +1+1+1 ) 从期望的角度分析,我们肯定是想 尽可能走的路程越短,走得路径 ...

  3. 洛谷P1027 Car的旅行路线 计算几何 图论最短路

    题意 求某城到某城的最小花费 一个城中有四个机场,一个城中的机场相互可达,用公路到达,但是不同城的公路的单位路程的 费不同,两个不同城的机场(我不知道相同城可不可以)可以通过机场到达,且飞机单位路程价 ...

  4. 洛谷 - P4009 汽车加油行驶问题(分层图最短路/最小费用最大流)

    题目链接:点击查看 题目大意:给出一个n*n的矩阵表示道路,途中有一些加油站,现在要从点(1,1)到达点(n,n),问最小花费,其中的一些规则如下: 汽车只能沿着网格边行驶,装满油后可以行驶K条边,出 ...

  5. 【洛谷1339 [USACO09OCT]】热浪Heat Wave 图论+最短路

    AC代码 #include<bits/stdc++.h> using namespace std; const int MAXN=62000+10,INF=999999; struct E ...

  6. 洛谷 - 试炼场(全部题目备份)

    整理的算法模板合集: ACM模板 目录 1.新手村 1 - 1 洛谷的第一个任务 1 - 2 顺序与分支 1 - 3 循环!循环!循环! 1 - 4 数组 1 - 5 简单字符串 1 - 6 过程函数 ...

  7. 洛谷 2953 [USACO09OPEN]牛的数字游戏Cow Digit Game

    洛谷 2953  [USACO09OPEN]牛的数字游戏Cow Digit Game 题目描述 Bessie is playing a number game against Farmer John, ...

  8. 洛谷 P4175: bzoj 1146: [CTSC2008]网络管理

    令人抓狂的整体二分题.根本原因还是我太菜了. 在学校写了一个下午写得头晕,回家里重写了一遍,一个小时就写完了--不过还是太慢. 题目传送门:洛谷P4175. 题意简述: 一棵 \(n\) 个结点的树, ...

  9. 洛谷2055 [ZJOI2009]假期的宿舍

    题目描述 学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如 A 和 B 都是学校的学生,A 要回家,而 C 来看B,C 与 A 不认识. ...

最新文章

  1. 云朵机(人造云朵,造云机)用在互动百科推搜索新方法中(转)
  2. 2020-11-18(如何打开.jar工具)
  3. 上验证cudnn是否安装成功_windows和linux上的tensorflow安装(极简安装方法)
  4. SAP CRM WebClient UI cross component跳转的一个具体例子
  5. Html转快应用方法,卡片跳转快应用指定页面,如何点返回直接退出快应用回到卡片...
  6. 29岁女程序员感慨:硕士学历,脱单比找工作买房还难,有同感么?
  7. Spring : @EnableConfigurationProperties注解
  8. 检测商品简码是否唯一,不重复
  9. 怀才当遇网—毕业季 | 你总说毕业遥遥无期,转眼就各奔东西
  10. P1828 香甜的黄油 (spfa)
  11. 如何保障“双11”期间亿万买家和卖家愉快地聊天
  12. 用友ERP-NC系统 NCFindWeb接口文件读取
  13. exoplayer和mediaplayer的封装
  14. 数据库——sql-server
  15. Could not load file ‘/etc/sysconfig/network-scripts/ifcfg-lo‘
  16. JSP高校信息管理系统myeclipse开发sql数据库web结构计算机java编程
  17. vue组件化的理解与定义
  18. LeetCode刷题复盘笔记—一文搞懂0 - 1背包之494. 目标和问题(动态规划系列第九篇)
  19. 关于封包工具一上午的研究总结
  20. maven依赖本地宝

热门文章

  1. uva 1605 ——Building for UN
  2. 布隆过滤器的原理、应用场景和源码分析实现
  3. linux--几种常见的进程调度算法
  4. cf#582div3 D——暴力
  5. 【Linux基础】Linux的5种IO模型详解
  6. c语言经典算法——查找一个整数数组中第二大数
  7. 数据链路层:基本概念
  8. 成功跳槽百度工资从15K涨到28K,跳槽薪资翻倍
  9. 文件在线预览 图片 PDF Excel Word
  10. docker在Centos上的安装