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的更多相关文章
随机推荐
- 解决xshell无法连接virtualbox中的虚拟机(Ubuntu18.04)的问题
遇到这个问题第一反应是是否安装相应的组件: sudo apt-get install openssh-server 开启防火墙端口 firewall-cmd --zone=/tcp --permane ...
- 2019牛客暑期多校训练营(第三场)F 单调队列
题意 给一个\(n\times n\)的矩阵,找一个最大的子矩阵使其中最大值与最小值的差小于等于\(m\). 分析 枚举子矩阵的上下边界,同时记录每一列的最大值和最小值. 然后枚举右边界,同时用两个单 ...
- vscode编辑器
插件 Auto Close Tag 自动关闭标签 Auto Rename Tag 自动修改标签 Bracket Pair Colorizer 多层括号不同颜色显示 EditorConfig fo ...
- Vue_(组件)自定义指令
Vue.js自定义指令 传送门 自定义指令:除了内置指令,Vue也允许用户自定义指令 注册指令:通过全局API Vue.directive可以注册自定义指令 自定义指令的钩子函数参数:自定义指令的钩子 ...
- Maven :Failed to execute goal on projectt ...: Could not resolve dependencies for project ...
Maven 项目运行 clean install 之前,先要运行父项目的 clean install, 否则可能出现 Failed to execute goal on project ...: C ...
- koa 路由模块化(一)
1.项目目录 2.入口文件 根目录/app.js /** * koa 路由模块化 */ const Koa = require('koa'); const router = require('koa- ...
- Linux 安全工具之extundelete误删除恢复
一:前言 在Linux中,我们通常会因为误删除文件而感到烦恼,rm -rf +文件 rf参数简直就是每个运维的噩梦,但是大家想过没,为什么删除文件那么快呢,为什么我们copy文件的时候那么慢. 其实 ...
- sklearn3_svc分类器预测
python机器学习-乳腺癌细胞挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003&u ...
- nodejs本版问题
接到一个新项目,前端用的是VUE,这就需要安装nodejs.记得之前安装的是V6.X,在npm install加载依赖库node_modules的时候ant-design-vue总是报错.看到同事用n ...
- Json+Ajax相关
Ajax前戏之json: 1.什么是json? JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式. 2.json对象和JavaScript ...