Description

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

Input

第 1 行: 整数 P(1<= P<=10000),表示连接牧场(谷仓)的道路的数目。 第 2 ..P+1行: 用空格分开的两个字母和一个整数: 被道路连接牧场的标记和道路的长度(1<=长度<=1000)。

Output

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

Sample Input

  1. 5
  2. A d 6
  3. B d 3
  4. C e 9
  5. d Z 8
  6. e Z 3

Sample Output

  1. B 11
  2.  
  3. 解题思路:最短路问题,因为牧场最多只有52个,可以看出多源最短路,使用Floyd算法;但同样的是终点只有一个,要求的是所有起点到终点中的
    最短路,我们完全可以反其道而行之,看出单源最短路问题,将终点看出起点,使用Dijkstra算法,利用其中的dis[]数组,找到终点到起点各点中
    距离最短的即可。
  4.  
  5. Floyd算法
  1. #include <cstdio>
  2. #include <cstring>
  3. #include <iostream>
  4. #include <algorithm>
  5. const int INF =1e8;
  6. using namespace std;
  7. int n;
  8. int flag[];
  9. int maps[][];
  10. void Floyd()
  11. {
  12. int i,j,k;
  13. for (k = 'A'; k <= 'z'; k++)
  14. {
  15. for (i = 'A'; i <= 'z'; i++)
  16. {
  17. for (j = 'A'; j <= 'z'; j++)
  18. {
  19. maps[i][j]=min(maps[i][j],maps[i][k]+maps[k][j]);
  20. }
  21. }
  22. }
  23. }
  24. int main()
  25. {
  26. char a,b;
  27. int c,i,j;
  28. int ans = INF;
  29. char ans1;
  30. for (i='A';i<='z';i++)
  31. {
  32. for (j ='A';j<='z';j++)
  33. {
  34. if (i!=j)
  35. {
  36. maps[i][j]=INF;
  37. }
  38. }
  39. }
  40. scanf("%d",&n);
  41. getchar();
  42. for (i = ; i <= n; i++)
  43. {
  44.  
  45. scanf("%c %c",&a,&b);
  46. scanf("%d",&c);
  47. getchar();
  48. if (a >= 'A' && a <= 'Z')
  49. {
  50. flag[a] = ;
  51. }
  52. if (b >= 'A' && b <= 'Z')
  53. {
  54. flag[b]=;
  55. }
  56. maps[a][b]=maps[b][a]=min(c,maps[a][b]);
  57. }
  58. Floyd();
  59. for (i ='A'; i<='Y'; i++)
  60. {
  61. if (flag[i]&&maps[i]['Z']<ans)
  62. {
  63. ans = maps[i]['Z'];
  64. ans1 = char(i);
  65. }
  66. }
  67. printf("%c %d\n",ans1,ans);
  68. return ;
  69. }
  1. Dijkstra算法
  1. #include <cstdio>
  2. #include <cstring>
  3. #include <iostream>
  4. #include <algorithm>
  5. const int INF =1e8;
  6. using namespace std;
  7. int n;
  8. int vis[];
  9. int flag[];
  10. int dis[];
  11. int maps[][];
  12. void Dijstra()
  13. {
  14. int i,j,pos=,mins,sum=;
  15. for(i='A'; i<='z'; ++i)
  16. {
  17. dis[i]=maps[][i];
  18. }
  19. vis[]=-;
  20. dis[]=;
  21. for(i='A'; i<'z'; i++)
  22. {
  23. mins=INF;
  24. for(j='A'; j<='z'; ++j)
  25. {
  26. if(!vis[j]&&mins>dis[j])
  27. {
  28. mins=dis[j];
  29. pos=j;
  30. }
  31. }
  32. vis[pos]=-;
  33. for(j='A'; j<='z'; ++j)
  34. {
  35. if(!vis[j]&&dis[j]>dis[pos]+maps[pos][j])
  36. {
  37. dis[j]=dis[pos]+maps[pos][j];
  38. }
  39. }
  40. }
  41. return ;
  42. }
  43. int main()
  44. {
  45. char a,b;
  46. int c,i,j;
  47. int ans = INF;
  48. char ans1;
  49. memset(vis,-,sizeof(vis));
  50. for (i='A'; i<='z'; i++)
  51. {
  52. for (j='A'; j<='z'; j++)
  53. {
  54. if(i!=j)
  55. {
  56. maps[i][j]=INF;
  57. }
  58. else
  59. {
  60. maps[i][i]=;
  61. }
  62. }
  63. }
  64. scanf("%d",&n);
  65. getchar();
  66. for (i = ; i <= n; i++)
  67. {
  68.  
  69. scanf("%c %c",&a,&b);
  70. scanf("%d",&c);
  71. getchar();
  72. for(j='A';j<='z';j++)
  73. {
  74. vis[a]=;
  75. }
  76. for(j='A';j<='z';j++)
  77. {
  78. vis[b]=;
  79. }
  80. maps[a][b]=maps[b][a]=min(c,maps[a][b]);
  81. }
  82. Dijstra();
  83. ans=INF;
  84. for(i='A';i<='Y';i++)
  85. {
  86. if(dis[i]<ans)
  87. {
  88. ans=dis[i];
  89. ans1=i;
  90. }
  91. }
  92. printf("%c %d\n",ans1,ans);
  93. return ;
  94. }
  1.  
  1.  
  1.  

USACO 2.4.4 Bessie Come Home 回家(最短路)的更多相关文章

  1. 【USACO 2.4 】Bessie Come Home

    题意:给出n条有权的双向边(10000),求到达Z最近的大写字母,及其距离. 题解:即求Z出发的最短路,用dijstra就可以了,注意边要开到20000以上. /* TASK: comehome LA ...

  2. USACO Section 2.4: Bessie Come Home

    因为题目给了边的信息,所以比较适用bell-man的方法 /* ID: yingzho1 LANG: C++ TASK: comehome */ #include <iostream> # ...

  3. Cogs 309. [USACO 3.2] 香甜的黄油 dijkstra,堆,最短路,floyd

    题目:http://cojs.tk/cogs/problem/problem.php?pid=309 309. [USACO 3.2] 香甜的黄油 ★★   输入文件:butter.in   输出文件 ...

  4. Bessie的体重问题

    P1028 Bessie的体重问题 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 USACO OCT09 8TH  描述 Bessie像她的诸多姊妹一样,因 ...

  5. USACO 完结的一些感想

    其实日期没有那么近啦……只是我偶尔还点进去造成的,导致我没有每一章刷完的纪念日了 但是全刷完是今天啦 讲真,题很锻炼思维能力,USACO保持着一贯猎奇的题目描述,以及尽量不用高级算法就完成的题解……例 ...

  6. [codevs2170]悠闲的漫步

    题目来源 http://codevs.cn/problem/2170/ http://www.tyvj.cn/p/1033 背景 USACO OCT09 5TH 描述 Bessie透过牛棚的大门向外望 ...

  7. [TYVJ] P1023 奶牛的锻炼

    奶牛的锻炼 背景 Background USACO   描述 Description 奶牛Bessie有N分钟时间跑步,每分钟她可以跑步或者休息.若她在第i分钟跑步,可以跑出D_i米,同时疲倦程度增加 ...

  8. tyvj 1027 木瓜地 简单模拟

    P1027 木瓜地 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 USACO OCT09 4TH 描述 Bessie不小心游荡出Farmer John的田地 ...

  9. 算法复习———dijkstra求次短路(poj3255)

    题目: Description Bessie has moved to a small farm and sometimes enjoys returning to visit one of her ...

随机推荐

  1. Leetcode名企之路

    微信扫码关注,每天推送一道面试题! 公众号:Leetcode名企之路 作者简介 知乎ID: 码蹄疾 码蹄疾,毕业于哈尔滨工业大学. 小米广告第三代广告引擎的设计者.开发者: 负责小米应用商店.日历.开 ...

  2. C++较精确的测试代码运行时间

    #include <chrono> using namespace chrono; int main() { auto t0 = system_clock::now(); //测试代码 a ...

  3. java 关于String

    1.两种创建方式 String str1 = "abc"; //字面量创建 String str2 = new String("abc"); //构造方法创建 ...

  4. Mongodb安装步骤(基于mongodb-3.2.12-tar.gz)

    1. 下载mongodb数据库:https://www.mongodb.com/download-center#community 2. 加压tar.gz压缩包,把解压文件拷贝到程序目录即可 3. 创 ...

  5. [译]C语言实现一个简易的Hash table(7)

    上一章我们讲了如何根据需要动态设置hash表的大小,在第四章中,我们使用了双重哈希来解决hash表的碰撞,其实解决方法有很多,这一章我们来介绍下其他方法. 本章将介绍两种解决hash表碰撞的方法: 拉 ...

  6. laravel5.5源码笔记(三、门面类facade)

    上次说了provider,那么这次来说说facade 首先是启动的源头,从laravel的kernel类中的$bootstrappers 数组,我们可以看到它的一些系统引导方法,其中的Register ...

  7. Django 中跨 app 创建外键、多对多引用的方法

    问题描述 我的 Django 项目中有两个 app. 在 PersonalCenter app下的 models.py 下定义了一个 Footprint 类: 在 LoginAndRegister a ...

  8. Node.js 引用 gm 包错误 Error: Could not execute GraphicsMagick/ImageMagick

    今天在学习前后台图像剪切时,下载了有图片剪切瑞士军刀之称的 GraphicsMagick. 给 gm.exe 配置了环境变量,在 npm 下好了 gm 的模块,但是运行却出现了错误. 错误如图: [E ...

  9. SpringBoot 启动报The Java Virtual Machine has not been configured to use the desired default character encoding (UTF-8)

    解决方法: 启动的时候在VM中添加 Dfile.encoding=UTF-8 就好了!

  10. Eclipse怎么恢复默认界面

    Eclipse里面将界面恢复到默认状态: 1.选择Eclipse的工具栏里面的“窗口(Window)”,找到“复位透视图(Reset Perspective)”选项: 2.单击“复位透视图(Reset ...