L2-001. 紧急救援

时间限制
200 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越

作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路上召集尽可能多的救援队。

输入格式:

输入第一行给出4个正整数N、M、S、D,其中N(2<=N<=500)是城市的个数,顺便假设城市的编号为0~(N-1);M是快速道路的条数;S是出发地的城市编号;D是目的地的城市编号。第二行给出N个正整数,其中第i个数是第i个城市的救援队的数目,数字间以空格分隔。随后的M行中,每行给出一条快速道路的信息,分别是:城市1、城市2、快速道路的长度,中间用空格分开,数字均为整数且不超过500。输入保证救援可行且最优解唯一。

输出格式:

第一行输出不同的最短路径的条数和能够召集的最多的救援队数量。第二行输出从S到D的路径中经过的城市编号。数字间以空格分隔,输出首尾不能有多余空格。

输入样例:

  1. 4 5 0 3
  2. 20 30 40 10
  3. 0 1 1
  4. 1 3 2
  5. 0 3 3
  6. 0 2 2
  7. 2 3 2

输出样例:

  1. 2 60
  2. 0 1 3

——————————————————————————————————

题目的意思是求从S到D的最短路,并输出最短路的条数和点权和最大的路

在Dijkstra时开几个数组更新即可,由于求条数,更新时等于的情况特殊处理

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cmath>
  5. #include <algorithm>
  6. #include <queue>
  7. #include <stack>
  8. #include <string>
  9. #include <set>
  10. #include<vector>
  11. #include <map>
  12. using namespace std;
  13. #define inf 0x3f3f3f3f
  14. int edge[505][505];
  15. int vis[505],cnt[505],dis[505],sum[505],pre[505];
  16. int a[505];
  17. struct node{
  18. int id,val;
  19. bool friend operator<(node a,node b)
  20. {
  21. return a.val>b.val;
  22. }
  23. };
  24.  
  25. int n,m;
  26.  
  27. void djstl(int o)
  28. {
  29. memset(dis,inf,sizeof dis);
  30. memset(vis,0,sizeof vis);
  31. memset(sum,0,sizeof sum);
  32. memset(cnt,0,sizeof cnt);
  33. node f,d;
  34. f.id=o;
  35. f.val=0;
  36. priority_queue<node>q;
  37. q.push(f);
  38. vis[o]=1;
  39. dis[o]=0;
  40. sum[o]=1;
  41. cnt[o]=a[o];
  42. while(!q.empty())
  43. {
  44. f=q.top();
  45. q.pop();
  46. vis[f.id]=1;
  47.  
  48. for(int i=0;i<n;i++)
  49. {
  50. if(!vis[i]&&f.val+edge[f.id][i]<dis[i])
  51. {
  52. dis[i]=f.val+edge[f.id][i];
  53. cnt[i]=cnt[f.id]+a[i];
  54. pre[i]=f.id;
  55. sum[i]=sum[f.id];
  56. d.id=i;
  57. d.val=dis[i];
  58. q.push(d);
  59. }
  60. else if(!vis[i]&&f.val+edge[f.id][i]==dis[i])
  61. {
  62. if(cnt[i]<cnt[f.id]+a[i])
  63. {
  64. cnt[i]=cnt[f.id]+a[i];
  65. pre[i]=f.id;
  66. }
  67. sum[i]+=sum[f.id];
  68.  
  69. }
  70. }
  71. }
  72. }
  73.  
  74. int main()
  75. {
  76. int st,ed,u,v,w;
  77. while(~scanf("%d%d%d%d",&n,&m,&st,&ed))
  78. {
  79. for(int i=0;i<n;i++)
  80. scanf("%d",&a[i]);
  81. memset(edge,inf,sizeof edge);
  82. for(int i=0;i<m;i++)
  83. {
  84. scanf("%d%d%d",&u,&v,&w);
  85. if(w<edge[u][v])
  86. {
  87. edge[u][v]=edge[v][u]=w;
  88. }
  89. }
  90. memset(pre,-1,sizeof pre);
  91. djstl(st);
  92. printf("%d %d\n",sum[ed],cnt[ed]);
  93. stack<int>s;
  94. s.push(ed);
  95. while(pre[ed]!=-1)
  96. {
  97. s.push(pre[ed]);
  98. ed=pre[ed];
  99. }
  100. int q=0;
  101. while(!s.empty())
  102. {
  103. if(q++)
  104. printf(" ");
  105. printf("%d",s.top());
  106. s.pop();
  107. }
  108. printf("\n");
  109. }
  110. return 0;
  111. }

团体程序设计天梯赛L2-001 紧急救援 2017-03-22 17:25 93人阅读 评论(0) 收藏的更多相关文章

  1. 团体程序设计天梯赛L1-020 帅到没朋友 2017-03-22 17:46 72人阅读 评论(0) 收藏

    L1-020. 帅到没朋友 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 当芸芸众生忙着在朋友圈中发照片的时候,总有一些人因为 ...

  2. 团体程序设计天梯赛L1-017 到底有多二 2017-03-22 17:31 155人阅读 评论(0) 收藏

    L1-017. 到底有多二 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 一个整数"犯二的程度"定义为该数 ...

  3. 第十二届浙江省大学生程序设计大赛-Ace of Aces 分类: 比赛 2015-06-26 14:25 12人阅读 评论(0) 收藏

    Ace of Aces Time Limit: 2 Seconds Memory Limit: 65536 KB There is a mysterious organization called T ...

  4. 2012年"浪潮杯"山东省第三届ACM大学生程序设计竞赛--n a^o7 ! 分类: 比赛 2015-06-09 17:16 14人阅读 评论(0) 收藏

    n a^o7 ! Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 All brave and intelligent fighte ...

  5. 团体程序设计天梯赛L1-019 谁先倒 2017-03-22 17:35 33人阅读 评论(0) 收藏

    L1-019. 谁先倒 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳 ...

  6. 团体程序设计天梯赛L1-018 大笨钟 2017-03-22 17:29 79人阅读 评论(0) 收藏

    L1-018. 大笨钟 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 微博上有个自称"大笨钟V"的家伙,每 ...

  7. 团体程序设计天梯赛L1-024 后天 2017-03-22 17:59 68人阅读 评论(0) 收藏

    L1-024. 后天 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 如果今天是星期三,后天就是星期五:如果今天是星期六,后天就 ...

  8. 团体程序设计天梯赛L1-023 输出GPLT 2017-03-22 17:56 39人阅读 评论(0) 收藏

    L1-023. 输出GPLT 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一个长度不超过10000的.仅由英文字母构成的 ...

  9. 团体程序设计天梯赛L1-022 奇偶分家 2017-03-22 17:48 81人阅读 评论(0) 收藏

    L1-022. 奇偶分家 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定N个正整数,请统计奇数和偶数各有多少个? 输入格式 ...

随机推荐

  1. swing版网络爬虫-丑牛迷你采集器2.0

    swing版网络爬虫-丑牛迷你采集器2.0 http://www.javacoo.com/code/704.jhtml 整合JEECMS http://bbs.jeecms.com/fabu/3186 ...

  2. debian8下pgsql的主备同步热切手动脚本

    9以后,通过流复制直接做 主:192.168.1.111 从:192.168.1.222 需要在postgres帐号下先配置ssh互信,双机都配置 sh-keygen -t rsa ssh-copy- ...

  3. PHP常用获取文件路径的函数集合整理

    转自: http://blog.sina.com.cn/s/blog_71ed1b870102vslg.html 我们在开发PHP项目过程中,经常会用到包含文件,所以有时候需要获取文件的相对路径或者绝 ...

  4. week3-栈和队列

    1.学习总结 2.PTA实验作业 2.1 题目1:7-1 jmu-报数游戏 2.2 设计思路(伪代码或流程图) 2.3 代码截图 2.4 PTA提交列表说明. 答案错误:error少了 !: 非零返回 ...

  5. JSON数组对象某个属性值查找

    1.引用国外开源Linq写法的js框架 地址:https://archive.codeplex.com/?p=jslinq https://www.nuget.org/packages/jslinq ...

  6. 给VS类文件添加默认头注释

    找到类文件所在路径:C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ItemTemplatesCache\CSharp\ ...

  7. [转][Java]简单标签库简介

    public class SimpleTagDemo extends SimpleTagSupport { @Override public void doTag() throws JspExcept ...

  8. win2008以上的系统,在vmware esxi5.5里怎么使用自定义规范管理器?sysprep

    经过测试,原来08以上的系统自带了sysprep.exe,所以vcenter对08以上的系统直接使用自定义规范管理器即可,跟linux一样了.注意不要跟03一样写入了sn即可. vCenter可使用s ...

  9. VS2017如何配置openGL环境

    转自:http://blog.csdn.net/qq_26982531/article/details/62056913 这里着重介绍vs2017配置openGL环境与以前版本的不同之处:       ...

  10. nginx.conf_2017-11-24

    user webroot; worker_processes 4; worker_cpu_affinity 1000 0100 0010 0001; worker_rlimit_nofile 6550 ...