Coderforces 20C 最短路记录路径
2017-08-23 19:07
232 查看
题意:给定一个带权无向图。你需要求出从点 1 到点 n的最短路。
思路:使用Dijkstra算法,当进行松弛操作时用数组记录下前缀,输出时先从n向1回溯记录再输出;
思路:使用Dijkstra算法,当进行松弛操作时用数组记录下前缀,输出时先从n向1回溯记录再输出;
#include<iostream> #include<algorithm> #include<string> #include<cstring> #include<map> #include<queue> #include<cmath> #include<stack> #include<vector> #include<cstdio> #define MAXN 33000 #define INF 0x3f3f3f3f #define lmid l,m,rt<<1 #define rmid m+1,r,rt<<1|1 #define ls rt<<1 #define rs rt<<1|1 #define Mod 1000000007 #define i64 __int64 #define LIMIT_ULL 100000000000000000 using namespace std; typedef pair<long long,int>P; struct node { int v,w; int next; }s[200005]; int head[100005]; int cnt=1; void add(int u,int v,int w) { s[cnt].v=v; s[cnt].w=w; s[cnt].next=head[u]; head[u]=cnt++; } long long dj[100005]; int lj[100005]; int jl[100005]; int n,m; void djstl(int pos) { lj[pos]=pos; fill(dj+1,dj+n+1,100000000000); dj[pos]=0; priority_queue<P,vector<P>,greater<P>>q; q.push(P(0,pos)); node e; while(!q.empty()) { P p=q.top(); q.pop(); int v=p.second; if(p.first>dj[v]) continue; for(int i=head[v];~i;i=s[i].next) { e=s[i]; if(dj[e.v]>dj[v]+e.w) { lj[e.v]=v; dj[e.v]=dj[v]+e.w; q.push(P(dj[e.v],e.v)); } } } } int main() { scanf("%d%d",&n,&m); memset(head,-1,sizeof(head)); for(int i=0;i<m;i++) { int a,b,c; scanf("%d%d%d",&a,&b,&c); add(a,b,c); add(b,a,c); } djstl(1); if(dj ==100000000000) cout<<-1<<endl; else { int len=0; int k=n; while(lj[k]!=1) { jl[len++]=lj[k]; k=lj[k]; } jl[len++]=lj[k]; for(int i=len-1;i>=0;i--) { cout<<jl[i]<<" "; } cout<<n<<endl; } return 0; }
相关文章推荐
- HDOJ 5294 Tricks Device 最短路(记录路径)+最小割
- PAT天梯赛L2-001. 紧急救援 dijk经典最短路劲+点权最大+记录路径
- 最短路记录路径——PKU 2457
- HDOJ--1385--Minimum Transport Cost(最短路记录路径)
- hdu 4871 树的分治+最短路记录路径
- HDU 1385 Minimum Transport Cost【最短路之路径记录】
- uva 11374 最短路+记录路径 dijkstra最短路模板
- hdu 4871 树的分治+最短路记录路径
- 最短路 + 记录路径 之 zoj 1456 Minimum Transport Cost (hdu 1385)
- hdu 1385 Minimum Transport Cost(最短路+记录路径)
- dijkstra求最短路并记录路径
- L2-001. 紧急救援 SPFA+记录路径,统计最短路
- 兔子与樱花(map+最短路+记录路径)
- HDU6181 Two Paths(次短路,路径记录,spfa,2017 HDU多校联赛 第10场)
- POJ2457 Part Acquisition(Spfa最短路+记录路径)
- 天梯赛补题 - 周游世界(记录路径的最短路)
- HDU ACM 3986 Harry Potter and the Final Battle(邻接表实现最短路dijkstra堆优化记录路径 + 枚举最短路上每条边)
- 【最短路】poj2457 SPFA+记录路径
- 507E Breaking Good (最短路+记录路径)
- HDOJ 5294 Tricks Device 最短路(记录路径)+最小割