PAT甲题题解-1030. Travel Plan (30)-最短路+输出路径
模板题
最短路+输出路径
如果最短路不唯一,输出cost最小的
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string.h>
#include <cmath>
#include <queue>
#define INF 0x3f3f3f3f
using namespace std;
const int maxn=;
int n,m,s,t; struct Edge{
int to;
int next;
int dis;
int cost;
}edge[maxn*maxn];
int head[maxn];
int tot;
void init(){
memset(head,-,sizeof(head));
tot=;
}
void add(int u,int v,int d,int cc){
edge[tot].to=v;
edge[tot].dis=d;
edge[tot].cost=cc;
edge[tot].next=head[u];
head[u]=tot++;
} struct Node{
int u;
int dis;
int cost;
bool operator<(const Node tmp)const{
if(dis==tmp.dis){
return cost>tmp.cost;
}
else{
return dis>tmp.dis;
}
}
}; int dis[maxn];
int pre[maxn];
int vis[maxn];
int costs[maxn];
void dijkstra(int s,int t){
for(int i=;i<n;i++){
dis[i]=INF;
costs[i]=INF;
pre[i]=-;
vis[i]=;
}
priority_queue<Node>q;
Node tmp,node;
tmp.u=s;
tmp.dis=;
tmp.cost=;
dis[s]=costs[s]=;
q.push(tmp);
while(!q.empty()){
tmp=q.top();
q.pop();
int u=tmp.u;
vis[u]=;
for(int k=head[u];k!=-;k=edge[k].next){
int v=edge[k].to;
if(!vis[v]){
if(tmp.dis+edge[k].dis<dis[v]){
dis[v]=tmp.dis+edge[k].dis;
costs[v]=tmp.cost+edge[k].cost;
node.u=v;
node.dis=dis[v];
node.cost=costs[v];
q.push(node);
pre[v]=u;
}
else if(tmp.dis+edge[k].dis==dis[v] && tmp.cost+edge[k].cost<costs[v]){
costs[v]=tmp.cost+edge[k].cost;
node.u=v;
node.dis=dis[v];
node.cost=costs[v];
q.push(node);
pre[v]=u;
}
}
}
}
}
int main()
{
scanf("%d %d %d %d",&n,&m,&s,&t);
int u,v,d,cc;
init();
for(int i=;i<m;i++){
scanf("%d %d %d %d",&u,&v,&d,&cc);
add(u,v,d,cc);
add(v,u,d,cc);
}
dijkstra(s,t);
int route[maxn];
int cnt=;
int id=t;
route[cnt++]=t;
while(pre[id]!=-){
id=pre[id];
route[cnt++]=id;
}
printf("%d",route[cnt-]);
for(int i=cnt-;i>=;i--){
printf(" %d",route[i]);
}
printf(" %d %d\n",dis[t],costs[t]);
return ;
}
PAT甲题题解-1030. Travel Plan (30)-最短路+输出路径的更多相关文章
- PAT甲题题解-1103. Integer Factorization (30)-(dfs)
该题还不错~. 题意:给定N.K.P,使得可以分解成N = n1^P + … nk^P的形式,如果可以,输出sum(ni)最大的划分,如果sum一样,输出序列较大的那个.否则输出Impossible. ...
- PAT甲题题解-1004. Counting Leaves (30)-统计每层叶子节点个数+dfs
统计每层的叶子节点个数建树,然后dfs即可 #include <iostream> #include <cstdio> #include <algorithm> # ...
- PAT甲题题解-1022. Digital Library (30)-map映射+vector
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789235.html特别不喜欢那些随便转载别人的原创文章又不给 ...
- PAT甲题题解-1072. Gas Station (30)-dijkstra最短路
题意:从m个加油站里面选取1个站点,使得其离住宅的最近距离mindis尽可能地远,并且离所有住宅的距离都在服务范围ds之内.如果有很多相同mindis的加油站,输出距所有住宅平均距离最小的那个.如果平 ...
- PAT甲题题解-1091. Acute Stroke (30)-BFS
题意:给定三维数组,0表示正常,1表示有肿瘤块,肿瘤块的区域>=t才算是肿瘤,求所有肿瘤块的体积和 这道题一开始就想到了dfs或者bfs,但当时看数据量挺大的,以为会导致栈溢出,所以并没有立刻写 ...
- PAT甲题题解-1107. Social Clusters (30)-PAT甲级真题(并查集)
题意:有n个人,每个人有k个爱好,如果两个人有某个爱好相同,他们就处于同一个集合.问总共有多少个集合,以及每个集合有多少人,并按从大到小输出. 很明显,采用并查集.vis[k]标记爱好k第一次出现的人 ...
- PAT甲题题解-1111. Online Map (30)-PAT甲级真题(模板题,两次Dijkstra,同时记下最短路径)
题意:给了图,以及s和t,让你求s到t花费的最短路程.最短时间,以及输出对应的路径. 对于最短路程,如果路程一样,输出时间最少的. 对于最短时间,如果时间一样,输出节点数最少的. 如果最短路程 ...
- PAT 甲级 1030 Travel Plan (30 分)(dijstra,较简单,但要注意是从0到n-1)
1030 Travel Plan (30 分) A traveler's map gives the distances between cities along the highways, to ...
- [图算法] 1030. Travel Plan (30)
1030. Travel Plan (30) A traveler's map gives the distances between cities along the highways, toget ...
随机推荐
- MYSQL导入csv类型的数据出现The MySQL server is running with the --secure-file-priv option
今天尝试使用 into outfile导出数据的时候出现错误: The MySQL server is running with the --secure-file-priv option so it ...
- 等我干IT发财了,就和你离婚。。。。。
01 “等我干IT发财了,就和你离婚” 他淡淡地说 听完后,她心里暖暖的, 她想,没有比这更天长地久. 海枯石烂的承诺了. ——2018年度最佳微小说奖 02 “等我干IT发财了,我就买房和你结婚.” ...
- 团队作业——Alpha冲刺 4/12
团队作业--Alpha冲刺 冲刺任务安排 杨光海天 今日任务:着手进行编辑界面的布局,插入控件,并进行参数调整. 明日任务:继续完善编辑界面控件,学习控件交互功能. 郭剑南 今日任务:上网查阅学习了关 ...
- 四、 git关联远程仓库及推送
接之前笔记,在 github上建立与本地同名的仓库 demo 关联远程仓库 1. https 模式 远程库的名字就是origin,这是Git默认的叫法 git remote add origi ...
- python reload(sys)找不到,name 'reload' is not defined和Python3异常-AttributeError: module 'sys' has no att
基于python3.6.1版本,在一个.py文件中,加入这3行:import requests, re, sysreload(sys)sys.setdefaultencoding("utf- ...
- linux(centos 7) 下安装nodejs
1,到node官网下载linux版本,有32和64位版本 2,将文件上传到linux下 3,使用tar -xvf node-v8.9.3-linux-x64.tar.xz 进行解压 4,建立软连接,变 ...
- redis命令手册
Redis 键(key) 命令 命令 描述 Redis DEL 命令 该命令用于在 key 存在是删除 key. Redis Dump 命令 序列化给定 key ,并返回被序列化的值. Redis E ...
- Spring framework3.2整合hibernate4.1报错:No Session found for current thread
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransact ...
- (四) DRF认证, 权限, 节流
一.Token 认证的来龙去脉 摘要 Token 是在服务端产生的.如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回 Token 给前端.前端可以在每次请求的时候带上 To ...
- Jmeter—实现识别验证码登录
在做自动化测试或压力测试时,验证码总是一个问题.在以往的压力测试经历中,测试一般在独立的测试环境中进行,可以放心禁用验证码或使用万能验证码,这个是最实用的.但是,这两天我尝试了一个使用第三方的图形图像 ...