CodeForce20C
这是一个裸的最短路的模板题,但是它需要输出路径。
用dijkstra的话首先敲一个最短路的板子,其次开一个数组p[]来记录路径,但是怎么存呢?我们需要记录每一个点的前驱,因为如果记录后边的话,一个点可能连多个节点,但是每一个点的前驱只有一个点,所以记录每一个被压入堆的点即可,最后输出。如果用spfa的话,也同理存入被松弛的点。
1.一定要注意数据类型,long long 足以让你死掉,当然也要全部修改,注意全局这个变量的出现都要修改。
2.注意加边的时候是有向边还是无向边。
3.记录路径一定是p[i]=j代表从j->i的路径,所以输出要倒序。
代码
#include<bits/stdc++.h>
#define maxn 500005
#define maxm 500005
using namespace std;
struct edge{
int next;
long long w;
int v;
}e[maxm];
int n,m,tot=,s;
int head[maxn],vis[maxn],pos[maxn];
long long dis[maxn];
struct node{
long long w;
int now;
inline bool operator <(const node &x)const
{
return w>x.w;//这里注意符号要为'>'
}
};
inline void add(int u,int v,long long w){
e[++tot].next=head[u];
head[u]=tot;
e[tot].w=w;
e[tot].v=v;
}
priority_queue<node>q;
void dijkstra(){
for(int i=;i<=n;i++) {
dis[i]=;
}
dis[]=;
q.push((node){,});
while(!q.empty()){
node x=q.top();
int u=x.now;
q.pop();
if(vis[u]==) continue;
vis[u]=;
for(int i=head[u];i;i=e[i].next){
int v=e[i].v;
if(dis[v]>dis[u]+e[i].w){
dis[v]=dis[u]+e[i].w;
q.push((node){dis[v],v});
pos[e[i].v]=u;
}
}
}
}
int main(){
cin>>n>>m;
for(int i=,x,y,z;i<=m;i++){
cin>>x>>y>>z;
add(x,y,z);
add(y,x,z);
}
dijkstra();
bool flag=false;
int num=;
int ans[maxn];
for(int i=n;i;i=pos[i]){
ans[++num]=i;
if(i==){
flag=true;
}
}
if(flag==true){
for(int i=num;i>=;i--){
cout<<ans[i]<<" ";
}
}
else cout<<-;
return ;
}
CodeForce20C的更多相关文章
随机推荐
- jQuery的replaceWith()函数用法详解
replaceWith,替换元素 replaceWith() 方法将选择的元素的内容替换为其他内容. 我们先在先看一个实例 <!DOCTYPE html> <html> < ...
- 编译器GCC的Windows版本 : MinGW-w64安装教程
MinGW-w64安装教程 http://rsreland.net/archives/1760
- php phpexcel 读取excel文件数据
public function readExcel(){ $allPath = '/home/examine\video/list.xls'; \think\Loader::import('exten ...
- 石川es6课程---7、数组
石川es6课程---7.数组 一.总结 一句话总结: ^ 主要就map(映射:一个对一个),reduce(汇总:一堆出来一个),filter 过滤器,forEach 循环(迭代) 四个方法 ^ 使用 ...
- [windows菜鸟]C#中调用Windows API参考工具
很多windows API都不知道签名,可以从下面几种方式进行查询 1.微软出的工具 P/Invoke Interop Assistant version 1.0 2.网站 pinvoke.net 3 ...
- linux性能分析之平均负载
平均负载 1,执行 top 或者 uptime 命令 来了解系统负载 uptime 分析显示 当前时间,系统运行时间,正在登录用户数 平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程 ...
- JavaScript日常学习3
JavaScript函数 函数就是包裹在花括号中的代码块,前面使用了关键词 function: function functionname() {执行代码} function myFunct ...
- RESTful 介绍
什么是RESTful?一种软件架构风格.设计风格,而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务端交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制. ...
- springboot整合mybatis时java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone.
时区问题造成的,解决方法是在数据源配置文件中在数据库链接处增加参数&serverTimezone=GMT%2B8对时区进行配置,配置为东八区. 修改前:spring.datasource.ur ...
- oracle增、删、改、查
参照文档 https://blog.csdn.net/yes_is_ok/article/details/79271965 https://blog.csdn.net/cl723401/article ...