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的更多相关文章
随机推荐
- mysql gis基本使用
# 插入空间数据 INSERT INTO `t_pot` VALUES ('1', '北京', POINT(116.401394,39.916042)); INSERT INTO `t_pot` VA ...
- Cow and Snacks
D. Cow and Snacks 参考:Codeforces 1209D. Cow and Snacks 思路:利用并查集,构建一个生成树,然后树的边数就是能够开心的客人的人数.用一个条件fin ...
- Python dictionary 字典
Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组等其他容器模型. 一.创建字典字典由键和对应值成对组成.字典也被称作关联数组或哈希表.基本语法如下: dict = {' ...
- oracle性能诊断sql
--1.阻塞及等待事件信息查询-- 查询所有会话的状态.等待类型及当前正在执行的SQL脚本select t.SID, t.SERIAL#, t.Status, t.Action, t.Event, t ...
- A Beginner's Guide To Understanding Convolutional Neural Networks Part One (CNN)笔记
原文链接:https://adeshpande3.github.io/adeshpande3.github.io/A-Beginner's-Guide-To-Understanding-Convolu ...
- [zookeeper]依赖jar的问题
zookeeper是依赖以下三个jar包 log4j-1.2.17.jar slf4j-api-1.7.25.jar slf4j-log4j12-1.7.18.jar 否则会报异常:java.lang ...
- Xcode中Info.plist文件里的"Bundle versions string, short" 跟 "Bundle version" 的区别
Bundle versions string, short:用于itunes上显示的版本号,即对外的版本.(最多是3个部分组成即 x.y.z) Bundle version:内部项目管理的版本号,不对 ...
- Qt qss 动态属性-不同条件不同显示
一. 1.为了用户界面外观的动态变化,属性选择器可以与动态属性组合使用. 2.当一个属性值变化时,所引用的样式不会自动更新.相反地,必须手动触发更新才会生效.unpolish()用于清理之前的样式,而 ...
- Qt输出中文乱码的问题
/* 我遇到的情况: 文件编码为UTF-8.程序输输出中文位乱码. 解决方案: 1. 工具->选项->环境->语言: Chinese 2. 选项->文本编辑器->行为-& ...
- Mac下的Pycharm教程
除非你是用记事本写代码,或者用vim写代码的大牛,那么推荐使用PyCharm编写Python代码. PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效 ...