蓝桥杯 算法训练 最短路 【SPFA队列优化 + dijkstra优先队列优化】
2018-01-26 11:38
567 查看
算法训练 最短路
时间限制:1.0s 内存限制:256.0MB问题描述
给定一个n个顶点,m条边的有向图(其中某些边权可能为负,但保证没有负环)。请你计算从1号点到其他点的最短路(顶点从1到n编号)。输入格式
第一行两个整数n, m。接下来的m行,每行有三个整数u, v, l,表示u到v有一条长度为l的边。
输出格式
共n-1行,第i行表示1号点到i+1号点的最短路。样例输入
3 31 2 -1
2 3 -1
3 1 2
样例输出
-1-2
数据规模与约定
对于10%的数据,n = 2,m = 2。对于30%的数据,n <= 5,m <= 10。
对于100%的数据,1 <= n <= 20000,1 <= m <= 200000,-10000 <= l <= 10000,保证从任意顶点都能到达其他所有顶点。
题意:给你一个有向图,n个顶点,m条边,求出1顶点离其他顶点的最短路径
分析: 经典的最短路问题,可以当做板子
spfa做法
#include<bits/stdc++.h> using namespace std; #define ll long long const int maxn = 1e5 + 10; vector<pair<int,int> > E[maxn]; int inq[maxn],n,m; ll dis[maxn]; queue<int> q; void spfa() { for(int i = 0;i < maxn;i++) { dis[i] = 2000000000; inq[i] = 0; } dis[1] = 0; q.push(1); while(!q.empty()) { int t = q.front(); q.pop();inq[t] = 0; for(int i = 0;i < E[t].size();i++) { int to = E[t][i].first; ll di = E[t][i].second; if(dis[to] > dis[t] + di) { dis[to] = dis[t] + di; if(!inq[to]) { inq[to] = 1; q.push(to); } } } } } int main(){ ios_base::sync_with_stdio(0); init(); cin>>n>>m; for(int i = 0;i < m;i++) { int a,b,c;cin>>a>>b>>c; E[a].push_back(make_pair(b,c)); } spfa(); for(int i = 2;i <= n;i++) { cout<<dis[i]<<endl; } return 0; }
dijkstra做法
#include<bits/stdc++.h> using namespace std; #define ll long long const int maxn = 1e5 + 10; vector<pair<int,int> > E[maxn]; int n,m,dis[maxn]; priority_queue<pair<int,int> > q; void dij() { for(int i = 0;i < maxn;++i) { dis[i] = 1e9; } dis[1] = 0; q.push(make_pair(0,1)); while (!q.empty()) { int t = q.top().second; q.pop(); for(int i = 0;i < E[t].size();++i) { int to = E[t][i].first; int di = E[t][i].second; if(dis[to] > dis[t] + di) { dis[to] = dis[t] + di; q.push(make_pair(-dis[to],to)); } } } } int main(){ ios_base::sync_with_stdio(0); cin>>n>>m; for(int i = 0;i < m;i++) { int a,b,c;cin>>a>>b>>c; E[a].push_back(make_pair(b,c)); } dij(); for(int i = 2;i <= n;i++) { cout<<dis[i]<<endl; } return 0; }
如有错误或遗漏,请私聊下UP,thx
相关文章推荐
- 【原创】最短路模板 Floyd,优先队列优化dijkstra,SPFA
- 最短路练习10/poj/1511 Invitation Cards ,(两次spfa),(单源最短路,优先队列优化的Dijkstra)
- POJ 1511 Invitation Cards(单源最短路,优先队列优化的Dijkstra)
- usaco2.4 comehome 最短路 Floyd, Dijkstra, Dijkstra优先队列优化
- hdu 2066最短路 dijkstra 及其优先队列优化
- hdu2544 最短路 dijkstra的使用优先队列优化的比较
- POJ1724 ROADS(深搜DFS,最短路,dijkstra,用优先队列优化)
- 最短路--dijkstra+优先队列优化模板
- uva 11374 最短路+记录路径 好题 dijkstra优先队列优化算法 邻接表法 可做模板 G++提交
- HDU ~ 2544 ~ 最短路 (Dijkstra模板,常规版 and 优先队列优化版)
- hdu-2544-最短路(Dijkstra + Dijkstra优先队列 + Bellman-ford + SPFA +Floyd) 纯模板题
- CUGB图论专场:K - The Shortest Path in Nya Graph(dijkstra优先队列优化+线性构图入边)
- 广度优先搜索以及队列优化的 Bellman-Ford 短路算法
- 最短路&&优先队列优化->HDU2544
- poj 2387(Dijkstra优先队列优化)
- pku 1511 Invitation Cards (SPFA 和 dijkstra+优先级队列优化)
- HDU2544(Dijkstra优先队列优化版)
- 最短路--spfa+队列优化模板
- dijkstra的优先队列优化
- 【bzo1579】拆点+dijkstra优先队列优化+其他优化