这是一个裸的最短路的模板题,但是它需要输出路径。

用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的更多相关文章

随机推荐

  1. php写入文件来调试接口数据

    $fp = fopen('write.txt', 'a+b'); //a+读写方式打开,将文件指针指向文件末尾.b为强制使用二进制模式. 如果文件不存在则尝试创建之. fwrite($fp, prin ...

  2. [Ubuntu]更改所有子文件和子目录所有者权限

    https://www.linuxidc.com/Linux/2015-03/114695.htm change mode -> chmod change owner -> chown 1 ...

  3. Vue_(组件通讯)动态组件结合keep-alive

    keep-alive 传送门 <keep-alive> 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们.和 <transition> 相似,<keep-alive ...

  4. 开始JavaScript的学习了

    为何学习? 1. 所有主流浏览器都支持JavaScript. 2. 目前,全世界大部分网页都使用JavaScript. 3. 它可以让网页呈现各种动态效果. 4. 做为一个Web开发师,如果你想提供漂 ...

  5. MySQL基础普及《MySQL管理之道:性能调优、高可用与监控》

    最近工作的内容涉及MySQL运维内容,陆陆续续读了几本相关的书,其中一本是<MySQL管理之道:性能调优.高可用与监控>. 内容涵盖性能调优(包括sql优化等).备份.高可用,以及读写分离 ...

  6. [go]net/http

    常用方法 r.Method == "GET" time.Now().Format("2006-01-02 15:04:05") //文件操作 os.Create ...

  7. git——sourceTree

    基本操作 修改密码怎么办? Tools → Options → Authentication 修改密码:或者删除账户,重新拉取需用户名.密码,重新输入即可

  8. Python标准组件ConfigParser配置文件解析器,保存配置时支持大写字母的方法

    虽然自己已经改用xml作为配置文件首选格式了,但是有时候还是需要解析ini.cfg文件(为了兼容早期版本或者其他作者的软件). 基本上Python自带的ConfigParser足够应对了,但是美中不足 ...

  9. pyqt5在QMainWindow中布局的问题

    在pyqt5中使用了父类为QMainWindow的话,在里面使用布局类,QGridLayout, QHBoxLayout ,QVBoxLayout 时,发现不好用. 解决: 如果是在以QWidget为 ...

  10. thinkphp6.0 nginx 配置

    location / {     index index.php;     #如果文件不存在则尝试TP解析     if (!-e $request_filename) {        rewrit ...