PTA 7-9 旅游规划(SPFA)
有了一张自驾旅游路线图,你会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的,那么需要输出最便宜的一条路径。
输入格式:
输入说明:输入数据的第1行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0~(N−1);M是高速公路的条数;S是出发地的城市编号;D是目的地的城市编号。随后的M行中,每行给出一条高速公路的信息,分别是:城市1、城市2、高速公路长度、收费额,中间用空格分开,数字均为整数且不超过500。输入保证解的存在。
输出格式:
在一行里输出路径的长度和收费总额,数字间以空格分隔,输出结尾不能有多余空格。
输入样例:
4 5 0 3
0 1 1 20
1 3 2 30
0 3 4 10
0 2 2 20
2 3 1 20
输出样例:
3 40
题意
求从s点出发到d点的最短路并且最小花费
题解
单源最短路,考虑Dijstra(优化)和SPFA,这里选用SPFA
求最短路不用说
求最小花费,如果到某点的长度相等,更新花费就行了
代码
#include<bits/stdc++.h>
using namespace std; const int N=,M=N*N,INF=0x3f3f3f3f;
int Vis[N],Dist[N],C[N];
int Cost[N][N],G[N][N];
int n,m,s,d;
void spfa()
{
memset(Dist,INF,sizeof(Dist));
queue<int> Q;
Q.push(s);
Dist[s]=;
while(!Q.empty())
{
int u=Q.front();Q.pop();
Vis[u]=;
for(int v=;v<=n;v++)
{
if(u!=v&&G[u][v]!=1e9)
{
if(Dist[v]>Dist[u]+G[u][v])//最短路
{
Dist[v]=Dist[u]+G[u][v];
C[v]=C[u]+Cost[u][v];//如果更新了最短路,花费直接更新
if(!Vis[v])
{
Q.push(v);
Vis[v]=;
}
}
else if(Dist[v]==Dist[u]+G[u][v])//最短路相同
{
if(C[v]>C[u]+Cost[u][v])//最小花费
{
C[v]=C[u]+Cost[u][v];
if(!Vis[v])
{
Q.push(v);
Vis[v]=;
}
}
}
}
}
}
printf("%d %d\n",Dist[d],C[d]);
}
int main()
{
int u,v,w,t;
scanf("%d%d%d%d",&n,&m,&s,&d);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(i==j)G[i][j]=Cost[i][j]=;
else G[i][j]=Cost[i][j]=1e9;
for(int i=;i<m;i++)
{
scanf("%d%d%d%d",&u,&v,&w,&t);
Cost[v][u]=Cost[u][v]=t;
G[v][u]=G[u][v]=w;
}
spfa();
return ;
}
PTA 7-9 旅游规划(SPFA)的更多相关文章
- PTA 07-图6 旅游规划 (25分)
题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/717 5-9 旅游规划 (25分) 有了一张自驾旅游路线图,你会知道城市间的高速公路 ...
- PTA 旅游规划(25 分)
7-10 旅游规划(25 分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条 ...
- PTA 7-10(图) 旅游规划 最短路问题
7-10(图) 旅游规划 (25 分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果 ...
- ACM程序设计选修课——Problem F:(ds:图)旅游规划(优先队列+SPFA)
问题 F: (ds:图)旅游规划 时间限制: 1 Sec 内存限制: 128 MB 提交: 14 解决: 4 题目描述 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路 ...
- 2018.09.09 poj2949Word Rings(01分数规划+spfa判环)
传送门 这题要先巧妙的转化一下. 对于每个字符串,我们把头尾的两个小字符串对应的点连边,边权是这个字符串的长度. 这样最多会出现26*26个点. 这个时候就只用求出边权和跟边数的最大比值了. 这个显然 ...
- Bzoj1486/洛谷P3199 最小圈(0/1分数规划+spfa)/(动态规划+结论)
题面 Bzoj 洛谷 题解(0/1分数规划+spfa) 考虑\(0/1\)分数规划,设当前枚举到的答案为\(ans\) 则我们要使(其中\(\forall b_i=1\)) \[ \frac{\sum ...
- POJ 3621 Sightseeing Cows 【01分数规划+spfa判正环】
题目链接:http://poj.org/problem?id=3621 Sightseeing Cows Time Limit: 1000MS Memory Limit: 65536K Total ...
- pat06-图5. 旅游规划(25)
06-图5. 旅游规划(25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该 ...
- 【bzoj4898】[Apio2017]商旅 Floyd+分数规划+Spfa
题目描述 有n个点.m条边.和k种商品.第$i$个点可以以$B_{ij}$的价格买入商品$j$,并以$S_{ij}$的价格卖出.任何时候只能持有一个商品.求一个环,使得初始不携带商品时以某种交易方式走 ...
随机推荐
- LeetCode 题解 Permutation Sequence 需要优化!
题目大意:给出n和k,找到1..n这些数组成的有序全排列中的第k个. 首先,n的全排列可以分成n组,每一组由n-1个数组成. 例如 3的全排列,分成三组: 1 2 3 和 1 3 2 2 1 3 ...
- js Json数组的增删改查
<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...
- 1test
Tencent's outsize influence in China's online world is ballast that should steady it as it targets b ...
- Java动态代理的两种实现方法
注:文章转载自:https://blog.csdn.net/m0_38039437/article/details/77970633 一.代理的概念 动态代理技术是整个java技术中最重要的一个技术, ...
- wx小程序自定义组件与页面之间参数传递
在开发中,很多页面中会使用相同的组件,这时可以将具有相同信息的部分封装成一个组件,方便开发中调用.在调用中可能会涉及到数据的传递问题,例如页面与组件,组件与组件直接的数据传递. 首先看看页面与组件直接 ...
- 前端CSS3笔记
第1章CSS3简介 如同人类的的进化一样,CSS3是CSS2的“进化”版本,在CSS2基础上,增强或新增了许多特性, 弥补了CSS2的众多不足之处,使得Web开发变得更为高效和便捷. 1.1 CS ...
- Oracle 查询版本号
select * from v$version; -- 或 select banner from sys.v_$version;
- Zabbix监控系统配置
1.Zabbix是一个基于WEB界面的提供分布式系统监控的企业级的开源解决方案 Zabbix能监视各种网络参数,保证服务器系统的安全稳定的运行,并提供灵活的通知机制以让SA快速定位并解决存在的各种问题 ...
- js高级-浏览器事件循环机制Event Loop
JavaScript 是队列的形式一个个执行的 同一时间只能执行一段代码,单线程的 (队列的数据结构) 浏览器是多线程的 JavaScript执行线程负责执行js代码 UI线程负责UI展示的 Jav ...
- vue--公告轮播
html: <div class="news" v-if="news.length > 0" > <ul class="m ...