模板题
最短路+输出路径
如果最短路不唯一,输出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)-最短路+输出路径的更多相关文章

  1. PAT甲题题解-1103. Integer Factorization (30)-(dfs)

    该题还不错~. 题意:给定N.K.P,使得可以分解成N = n1^P + … nk^P的形式,如果可以,输出sum(ni)最大的划分,如果sum一样,输出序列较大的那个.否则输出Impossible. ...

  2. PAT甲题题解-1004. Counting Leaves (30)-统计每层叶子节点个数+dfs

    统计每层的叶子节点个数建树,然后dfs即可 #include <iostream> #include <cstdio> #include <algorithm> # ...

  3. PAT甲题题解-1022. Digital Library (30)-map映射+vector

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789235.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  4. PAT甲题题解-1072. Gas Station (30)-dijkstra最短路

    题意:从m个加油站里面选取1个站点,使得其离住宅的最近距离mindis尽可能地远,并且离所有住宅的距离都在服务范围ds之内.如果有很多相同mindis的加油站,输出距所有住宅平均距离最小的那个.如果平 ...

  5. PAT甲题题解-1091. Acute Stroke (30)-BFS

    题意:给定三维数组,0表示正常,1表示有肿瘤块,肿瘤块的区域>=t才算是肿瘤,求所有肿瘤块的体积和 这道题一开始就想到了dfs或者bfs,但当时看数据量挺大的,以为会导致栈溢出,所以并没有立刻写 ...

  6. PAT甲题题解-1107. Social Clusters (30)-PAT甲级真题(并查集)

    题意:有n个人,每个人有k个爱好,如果两个人有某个爱好相同,他们就处于同一个集合.问总共有多少个集合,以及每个集合有多少人,并按从大到小输出. 很明显,采用并查集.vis[k]标记爱好k第一次出现的人 ...

  7. PAT甲题题解-1111. Online Map (30)-PAT甲级真题(模板题,两次Dijkstra,同时记下最短路径)

    题意:给了图,以及s和t,让你求s到t花费的最短路程.最短时间,以及输出对应的路径.   对于最短路程,如果路程一样,输出时间最少的. 对于最短时间,如果时间一样,输出节点数最少的.   如果最短路程 ...

  8. 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 ...

  9. [图算法] 1030. Travel Plan (30)

    1030. Travel Plan (30) A traveler's map gives the distances between cities along the highways, toget ...

随机推荐

  1. Office Web app server 2013 目前无法和windows server 2012 R2兼容。

    另外旧版的office文档和PDF格式不支持预览功能.

  2. November 11th, 2017 Week 45th Saturday

    Happiness is a direction, not a place. 快乐是一个方向,不是一个目的. Do you remember those moments in your life wh ...

  3. Sublime Test 3 搭建C++11编译环境(Windows)

    0. 我的环境: Windows 8.1,Sublime Test 3 - Build 3126,CodeBlocks 16.01. 1. 下载Sublime Test 3,以及安装Package和各 ...

  4. 第二次项目冲刺(Beta版本)2017/12/8

    一.任务分布 二.燃尽图 三.站立式会议 1.照片(就要传了) 2.任务安排 四.总结 这次吸收了上次的教训,将任务进行更加详细的分布,分工更加明确,果然效率就高多了,哈哈哈.

  5. bat替换文件的指定内容

    需求:替换文件my.ini中的1000 为10000,bat脚本如下: c:cd C:\Program Files\MySQL\MySQL Server 5.5copy my.ini my1126ba ...

  6. ORACLE 11GR2常用命令

    一.ORACLE的启动和关闭 1.在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a.启动ORACLE系统 oracle>svrmgrl ...

  7. 关于 Spring AOP (AspectJ) 该知晓的一切

    关联文章: 关于Spring IOC (DI-依赖注入)你需要知道的一切 关于 Spring AOP (AspectJ) 你该知晓的一切 本篇是年后第一篇博文,由于博主用了不少时间在构思这篇博文,加上 ...

  8. Ubuntu安装Chromium浏览器

    今天介绍一下谷歌浏览器在ubuntu 系统环境下的安装步骤,1.在终端的窗口上输入: sudo wget http://www.linuxidc.com/files/repo/google-chrom ...

  9. 关于PCB的线宽与过孔

    关于PCB的线宽与过孔 我们在画PCB时一般都有一个常识,即走大电流的地方用粗线(比如50mil,甚至以上),小电流的信号可以用细线(比如10mil). 对于某些机电控制系统来说,有时候走线里流过的瞬 ...

  10. 2017-2018-2 20155315《网络对抗技术》Exp6 :信息搜集与漏洞扫描

    实验目的 进行信息搜集的工作,为实战做准备 教程 实验内容 外围信息搜集 NMAP OpenVAS 实验步骤 (一)各种搜索技巧的应用 实战的前提是进行信息搜索.当我们想要有针对地进行操作的时候,就要 ...