CF20C Dijkstra?( Dijkstra!练手)难度⭐⭐⭐
题意翻译
题目大意
给出一张图,请输出其中任意一条可行的从点
11
1 到点
nn
n 的最短路径。
输入输出格式
输入格式
第一行:两个整数n,m,分别表示点数和边数
接下来m行:每行三个整数u,v,w,表示u和v之间连一条边权为w的双向边。
输出格式
一行:一个可行的路径,如果不存在这种路径输出-1
2<=n<=105,0<=m<=1052<=n<=10^5,0<=m<=10^52<=n<=105,0<=m<=105
5 6
1 2 2
2 5 5
2 3 4
1 4 1
4 3 3
3 5 1
1 4 3 5
注意这里输出路径要到着输出
不知道为什么链式前向星中 head
用-1就WA,以后都不用-1了,遇见从0开始的就++
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
#define ls (p<<1)
#define rs (p<<1|1)
#define mid (l+r)/2
#define over(i,s,t) for(int i=s;i<=t;++i)
#define lver(i,t,s) for(int i=t;i>=s;--i)
using namespace std;
typedef long long ll;
const ll N=1e5+7;
const ll INF=1e13+7;
const ll mod=2147483647;
const double EPS=1e-6;
struct node
{ll nex,v,val;
}edge[N<<2];
ll n,m;
ll head[N],cnt,tot;
bool flag,vis[N];
ll dis[N],pre[N],pa[N];
priority_queue< pair<ll,ll> >q;
inline void add(ll x,ll y,ll v)
{edge[++cnt].nex=head[x];edge[cnt].v=y;edge[cnt].val=v;head[x]=cnt;
}
void dijkstra()
{over(i,1,n)dis[i]=INF;memset(vis,false,sizeof vis);q.push(make_pair(0,1));dis[1]=0;while(!q.empty()){ll u=q.top().second;q.pop();if(vis[u])continue;vis[u]=true;for(int i=head[u];i;i=edge[i].nex){ll v=edge[i].v;if(dis[u]+edge[i].val<dis[v]){dis[v]=dis[u]+edge[i].val;q.push(make_pair(-dis[v],v));pre[v]=u;}}}
}
inline void print()
{for(int i=n;i;i=pre[i]){pa[++tot]=i;if(i==1)flag=true;}if(flag){lver(i,tot,1)printf("%lld ",pa[i]);}else printf("-1");return;
}
int main()
{scanf("%lld%lld",&n,&m);over(i,1,m){ll x,y,z;scanf("%lld%lld%lld",&x,&y,&z);add(x,y,z);add(y,x,z);}dijkstra();print();return 0;
}
有任何疑问欢迎评论哦虽然我真的很菜
点个关注再走吧
CF20C Dijkstra?( Dijkstra!练手)难度⭐⭐⭐相关推荐
- python练手经典100例-Python 的练手项目有哪些值得推荐?
首先两点建议:最好不要写太应用的程序练手,如果你发现你写程序的大部分时间都在查库手册(或者类似的事情),那就是大家所说的"搬砖"了:要思考什么更像是知识,什么只是经验,还是那句老话 ...
- python项目实例初学者-适合初学者练手的 10 个 有趣Python项目
Python Python开发 Python语言 适合初学者练手的 10 个 有趣Python项目 想成为一个优秀的开发者,没有捷径可走,势必要花费大量时间在键盘后. 而不断地进行各种小项目开发,可以 ...
- python有趣的小项目-10 个最值得 Python 新人练手的有趣项目
原标题:10 个最值得 Python 新人练手的有趣项目 作者 | Claire D. Costa 编译 | Wendy 有很多 Python 新手留言问:"Python 入门很久了,但项目 ...
- python项目-推荐 10 个有趣的 Python 练手项目
想成为一个优秀的Python程序员,没有捷径可走,势必要花费大量时间在键盘后. 而不断地进行各种小项目开发,可以为之后的大开发项目积攒经验,做好准备. 但不少人都在为开发什么项目而苦恼. 因此,我为大 ...
- 10个相见恨晚的 Java 在线练手项目
前一篇:?[清单]37个超棒的 Web 数据可视化工具 Java 开发简单的计算器 难度为一般,适合具有 Java 基础和 Swing 组件编程知识的用户学习 推荐指数:????? 在线实操链接 制作 ...
- [推荐]ORACLE SQL:经典查询练手第三篇(不懂装懂,永世饭桶!)
[推荐]ORACLE SQL:经典查询练手第三篇(不懂装懂,永世饭桶!) [推荐]ORACLE SQL: 经典查询练手第三篇(不懂装懂,永世饭桶!) --通过知识共享树立个人品牌. 本文与大家共同讨论 ...
- python练手经典100例-10 个最值得 Python 新人练手的有趣项目
原标题:10 个最值得 Python 新人练手的有趣项目 作者 | Claire D. Costa 编译 | Wendy 有很多 Python 新手留言问:"Python 入门很久了,但项目 ...
- c# 火狐浏览器怎么嵌入窗体中_「C#上位机必看」你们想要的练手项目来了
最近有越来越多做电气的小伙伴开始学习C#来做上位机开发,很多人在学习一段时间后,都有这种感觉,似乎学到了很多知识,但是不知道怎么应用,因此我找了一个真实的上位机小项目,让大家来练练手.这篇文章主要对这 ...
- python游戏制作软件_10 个最值得 Python 新人练手的有趣项目
原标题:10 个最值得 Python 新人练手的有趣项目 作者 | Claire D. Costa 编译 | Wendy 有很多 Python 新手留言问:"Python 入门很久了,但项目 ...
最新文章
- ICCV 2013的人脸特征点检评测及代码
- android左侧固定导航栏,Android使用fragment实现左侧导航
- ant 合并 jar
- Hadoop作业提交分析(三)
- ubuntu自带截图工具--方便好用
- 【Elasticsearch】使用 Elasticsearch Painless 脚本以递归方式遍历 JSON 字段
- Physical Standby Database Failover
- 随机化算法 —— 数组置乱器的实现
- c语言RePutDate用法,C语言 栈的使用
- STM32硬件编程_学习思路
- WPS:添加公式后,行间距变宽的解决方法
- 无油螺杆鼓风机-市场现状及未来发展趋势
- V2X(二)GNSSPC5UU
- 手写java_JAVA实现简单手写识别
- 05- 防火墙用户管理
- 5G大规模天线基站下的多用户性能测试技术
- 用墨刀进行简单的后台页面设计
- fabric sdk java_Hyperledger Fabric Java SDK最新教程
- 是否能构成三角形java
- R语言aggregate函数