博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
L2-001 紧急救援 (dijkstra+dfs回溯路径)
阅读量:5135 次
发布时间:2019-06-13

本文共 2211 字,大约阅读时间需要 7 分钟。

L2-001 紧急救援 (25 分)

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

输入格式:

输入第一行给出4个正整数N、M、S、D,其中N(2N500)是城市的个数,顺便假设城市的编号为0 ~ (N1);M是快速道路的条数;S是出发地的城市编号;D是目的地的城市编号。

第二行给出N个正整数,其中第i个数是第i个城市的救援队的数目,数字间以空格分隔。随后的M行中,每行给出一条快速道路的信息,分别是:城市1、城市2、快速道路的长度,中间用空格分开,数字均为整数且不超过500。输入保证救援可行且最优解唯一。

输出格式:

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

输入样例:

4 5 0 320 30 40 100 1 11 3 20 3 30 2 22 3 2

输出样例:

2 600 1 3 这个题和如出一辙
1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 using namespace std; 9 const int inf=0x3f3f3f3f; 10 const int maxn=510; 11 int n,m,s,d; 12 int cnt=0,sum=0,res=0; 13 struct node{ 14 int pos; 15 int len; 16 node(){} 17 node(int pos,int len):pos(pos),len(len){} 18 friend bool operator < (node a,node b) 19 { 20 return a.len>b.len; 21 } 22 }head,tail; 23 vector
v[maxn]; 24 vector
pre[maxn]; 25 vector
tpath; 26 vector
path; 27 int vis[maxn],dis[maxn]; 28 int p[maxn]; 29 void dijkstra(int st) 30 { 31 priority_queue
q; 32 dis[st]=0; 33 head.pos=st; 34 head.pos=0; 35 q.push(head); 36 while(!q.empty()) 37 { 38 head=q.top(); 39 q.pop(); 40 if(vis[head.pos]) 41 continue; 42 vis[head.pos]=1; 43 int now=head.pos; 44 for(int i=0;i
dis[head.pos]+len) 50 { 51 dis[to]=dis[head.pos]+len; 52 pre[to].clear(); 53 pre[to].push_back(head.pos); 54 q.push(tail); 55 } 56 else if(dis[to]==dis[head.pos]+len) 57 { 58 pre[to].push_back(head.pos); 59 q.push(tail); 60 } 61 } 62 } 63 } 64 void dfs(int now) 65 { 66 if(now==0) 67 { 68 cnt++; 69 tpath.push_back(now); 70 sum=0; 71 for(int i=tpath.size()-1;i>=0;i--) 72 { 73 74 sum+=p[tpath[i]]; 75 } 76 // printf("sum=%d\n",sum); 77 if(sum>res) 78 { 79 res=sum; 80 path=tpath; 81 } 82 tpath.pop_back(); 83 return; 84 } 85 tpath.push_back(now); 86 for(int i=0;i
>n>>m>>s>>d; 95 for(int i=0;i
=0;i--)116 {117 if(i!=0)118 printf("%d ",path[i]);119 else120 printf("%d",path[i]);121 }122 }

 

 

转载于:https://www.cnblogs.com/1013star/p/10384568.html

你可能感兴趣的文章
C# CheckedListBox控件的使用方法
查看>>
【HDOJ】2007平方和与立方和
查看>>
Python爬虫实战八之利用Selenium抓取淘宝匿名旺旺
查看>>
推送通知是如何做到的?手机耗电的技术背景是怎么回事儿?详解推送技术架构之坑...
查看>>
团队合作初步
查看>>
shader中的广告板技术
查看>>
四月の诈尸笔记
查看>>
tomcat使用和配置
查看>>
spring security的原理及教程
查看>>
css 超出部分以省略号的形式显示
查看>>
jquery animate 制作简单弹幕
查看>>
【bzoj4590】[Shoi2015]自动刷题机
查看>>
springboot+mybatisPlust按条件查询分页
查看>>
mac 杀掉占用某个端口的进程
查看>>
xnb转png(XNB EXPORTER)
查看>>
python 基础——generate生成器
查看>>
angularjs 利用$http 请求出现 400 Bad Request
查看>>
Linux的inode的理解
查看>>
【分享】纯js的n级联动列表框 —— 基于jQuery,支持下拉列表框和列表框,最重要的是n级,当然还有更重要的...
查看>>
github使用指南
查看>>