PAT甲级1003. Emergency

题意:

作为一个城市的紧急救援队长,你将得到一个你所在国家的特别地图。该地图显示了几条分散的城市,连接着一些道路。每个城市的救援队数量和任何一对城市之间的每条路线的长度在地图上标记。当你从其他城市发出紧急电话时,

你的工作是尽快引导你的人到这个地方,同时在途中尽可能多的呼唤城市中的别的救援队。

输入

每个输入文件包含一个测试用例。对于每个测试用例,第一行包含4个正整数:N(<= 500) - 城市数量(城市编号从0到N-1),M - 道路数量C1和C2 - 你目前在的城市,你必须分别保存。下一行包含N个整数,其中i-

整数是第i个城市的救援队数。然后M行跟随,每个描述一个具有三个整数c1,c2和L的道路,分别是通过道路连接的一对城市和该道路的长度。保证从C1到C2至少存在一条路径。

输出

对于每个测试用例,打印一行两个数字:C1和C2之间不同最短路径的数量以及可以收集的最大救援队数。

一行中的所有数字必须分开一个空格,并且在行的末尾不允许额外的空格。

思路:

题意就是求city1到city2的单源最短路径,并且求出最短路径下能搜集最多救援队数量。

ac代码:

C++

  1. // pat1003.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. #include<iostream>
  5. #include<cstdio>
  6. #include<string>
  7. #include<algorithm>
  8. using namespace std;
  9. const int MAX = 0x7fffffff;
  10. int road[501][501]; //记录city间的距离
  11. int rescue[501]; //记录city的救援队
  12. int n, m;
  13. int starting, ending;
  14. int len[501]; //记录start到各个点的距离
  15. bool visit[501] = { false }; //保存已经遍历的点
  16. int main()
  17. {
  18. cin >> n >> m >> starting >> ending;
  19. for (int i = 0; i < n; i++)
  20. cin >> rescue[i];
  21. for (int i = 0; i < n; i++)
  22. {
  23. for (int j = 0; j < n; j++)
  24. {
  25. if (i == j) road[i][j] = 0;
  26. else road[i][j] = MAX;
  27. }
  28. }
  29. for (int i = 0; i < n; i++)
  30. len[i] = MAX;
  31. int c1,c2;
  32. for (int i = 0; i < m; i++)
  33. {
  34. cin >> c1 >> c2;
  35. cin >> road[c1][c2];
  36. road[c2][c1] = road[c1][c2];
  37. if (c1 == starting) len[c2] = road[c1][c2];
  38. if (c2 == starting) len[c1] = road[c1][c2];
  39. }
  40. int tempmin = MAX,tempindex;
  41. int diffdis[501] = { 0 }; //记录有几种最短路径
  42. diffdis[starting] = 1;
  43. len[starting] = 0;
  44. int maxpeo[501] = { 0 }; //记录能搜集的最大救援队数量
  45. maxpeo[starting] = rescue[starting];
  46. while(1)
  47. {
  48. tempmin = MAX;
  49. for (int i = 0; i < n; i++)
  50. {
  51. if (!visit[i] && len[i] < tempmin)
  52. {
  53. tempmin = len[i];
  54. tempindex = i;
  55. }
  56. }
  57. visit[tempindex] = true;
  58. for (int i = 0; i < n; i++)
  59. {
  60. if (!visit[i] && road[tempindex][i] != MAX && tempmin + road[tempindex][i] < len[i])
  61. {
  62. len[i] = tempmin + road[tempindex][i];
  63. diffdis[i] = diffdis[tempindex];
  64. maxpeo[i] = maxpeo[tempindex] + rescue[i];
  65. }
  66. else if (!visit[i] && road[tempindex][i] != MAX && tempmin + road[tempindex][i] == len[i])
  67. {
  68. diffdis[i] += diffdis[tempindex];
  69. maxpeo[i] = max(maxpeo[i], maxpeo[tempindex] + rescue[i]);
  70. }
  71. }
  72. if (tempindex == ending) break;
  73. }
  74. cout << diffdis[ending] << " " << maxpeo[ending] << endl;
  75. return 0;
  76. }

PAT甲级1003. Emergency的更多相关文章

  1. 图论 - PAT甲级 1003 Emergency C++

    PAT甲级 1003 Emergency C++ As an emergency rescue team leader of a city, you are given a special map o ...

  2. PAT 甲级 1003. Emergency (25)

    1003. Emergency (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...

  3. PAT 甲级1003 Emergency (25)(25 分)(Dikjstra,也可以自己到自己!)

    As an emergency rescue team leader of a city, you are given a special map of your country. The map s ...

  4. PAT 甲级 1003 Emergency

    https://pintia.cn/problem-sets/994805342720868352/problems/994805523835109376 As an emergency rescue ...

  5. PAT Advanced 1003 Emergency 详解

    题目与翻译 1003 Emergency 紧急情况 (25分) As an emergency rescue team leader of a city, you are given a specia ...

  6. PAT Advanced 1003 Emergency (25) [Dijkstra算法]

    题目 As an emergency rescue team leader of a city, you are given a special map of your country. The ma ...

  7. PAT甲级1003题解——Dijkstra

    解题步骤: 1.初始化:设置mat[][]存放点之间的距离,vis[]存放点的选取情况,people[]存放初始时每个城市的人数,man[]存放到达每个城市的救援队的最多的人数,num[]存放到达每个 ...

  8. PAT (Advanced Level) Practise 1003 Emergency(SPFA+DFS)

    1003. Emergency (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...

  9. PAT 解题报告 1003. Emergency (25)

    1003. Emergency (25) As an emergency rescue team leader of a city, you are given a special map of yo ...

随机推荐

  1. Apache+jboss群集部署

    Jboss default方式上的Cluster配置[二] - 操作系统http://www.myexception.cn/operating-system/862858.html Jboss def ...

  2. 013 GC机制

    本文转自:https://www.cnblogs.com/shudonghe/p/3457990.html 最近还是在找工作,在面试某移动互联网公司之前认为自己对Java的GC机制已经相当了解,其他面 ...

  3. vue头像上传

    项目四知识点 默认头像 选择头像 <template> <div class="adatar"> <img :src="adatar?ada ...

  4. 中国区的Azure添加到 VSTS 的 Service Endpoint

    把中国区的Azure添加到 VSTS (Visual Studio Team System) 的 Service Endpoint. 这个是使用 VSTS 自动部署到中国区Azure的前置条件. Se ...

  5. u-boot界面添加命令[demo]

    目标板:2440 如何在u-boot界面中增加命令 在/common/目录下建立文件,调用执行函数do_bootm就行,然后在修改Makefile,就OK了. 比如在u-boot界面添加命令test ...

  6. RSA加密登录

    1.首先下载前端JS加密框架:jsencrypt 2.后台添加解密帮助类:RSACrypto(参考文章最后) 3.在登录页面先引入jquery.min.js,在引入jsencrypt.min.js 4 ...

  7. C#串口serialPort操作

    现在大多数硬件设备均采用串口技术与计算机相连,因此串口的应用程序开发越来越普遍.例如,在计算机没有安装网卡的情况下,将本机上的一些信息数据 传输到另一台计算机上,那么利用串口通信就可以实现.运行本程序 ...

  8. SSL与HTTPS,HTTP有什么联系

    有人问:http和https有什么区别? HTTP,全称"Hyper Text Transfer Protocol",是从浏览器访问网站时使用的默认协议.由于浏览器到网站之间的数据 ...

  9. cin关闭同步[转]

    很多人会说cin的速度比scanf慢很多, 其实不然. cin慢的原因主要在于默认cin与stdin总是保持同步, 这一步是消耗时间大户. 只需要加上ios::sync_with_stdio(fals ...

  10. hdu 5895(矩阵快速幂+欧拉函数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5895 f(n)=f(n-2)+2*f(n-1) f(n)*f(n-1)=f(n-2)*f(n-1)+2 ...