洛谷P3371 单源最短路径
2017-07-06 20:49
323 查看
洛谷P3371 单源最短路径
洛谷P3371 单源最短路径考点
题意
思路
额外
代码
考点
最短路SPFA或dijistra的堆优化
题意
洛谷原题链接非常裸的最短路题目,做来练练手。
思路
单源最短路,SPFA走起。SPFA快又好写。额外
这道题数据十分给力,dijistra模板是过不了的,要加堆优化。但是信奉SPFA的我不方!第一次WA了一个点,把
memset(dis,2147483647,sizeof(dis))换成
for(int i=1;i<=maxnode;++i) dis[i]=2147483647后就A了…
不要信memset!
还有,边是有向边,因此add_Edge时不要建立另外一条
代码
#include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; const int maxnode=10001; const int maxline=500001; int startnode,totnode,totline; long long dis[maxnode]; struct lsqqx { int to; int value; int nxt; }edge[maxline]; int cnt=0; int head[maxnode]; #define forline(i,x) for(int i=head[x];i!=-1;i=edge[i].nxt) queue<int> team; bool exist[maxnode]; void add_Edge(int x,int y,int val) { edge[cnt].nxt=head 4000 [x]; edge[cnt].to=y; edge[cnt].value=val; head[x]=cnt; cnt++; } void SPFA(int s) { dis[s]=0; team.push(s); int will; int nownode; while(!team.empty()) { nownode=team.front(); team.pop(); exist[nownode]=0; forline(i,nownode) { will=edge[i].to; if(dis[will]>dis[nownode]+edge[i].value) { dis[will]=dis[nownode]+edge[i].value; if(!exist[will]) { exist[will]=1; team.push(will); } } } } } int main() { for(int i=1;i<=maxnode;++i) dis[i]=2147483647; memset(head,-1,sizeof(head)); scanf("%d%d%d",&totnode,&totline,&startnode); int x,y,z; for(int i=1;i<=totline;++i) { scanf("%d%d%d",&x,&y,&z); add_Edge(x,y,z); } SPFA(startnode); for(int i=1;i<=totnode-1;++i) { printf("%lld ",dis[i]); } printf("%lld\n",dis[totnode]); }
相关文章推荐
- 洛谷P3371【模板】单源最短路径
- 洛谷P3371 【模板】单源最短路径
- 洛谷P3371 单源最短路径(spfa)
- 洛谷P3371 单源最短路径(Dijkstra+堆优化)
- 洛谷P3371 【模板】单源最短路径
- HDU 3790 最短路径问题(单源最短路)
- Java实现Dijkstra单源最短路径
- 单源最短路径
- Poj 3072 Robot(单源最短路径)
- 单源最短路径通用解法—BellmanFord
- BFS算法之求单源最短路径
- 【专题】单源最短路径(Spfa,Dijkstra)
- 单源最短路径 Dijkstra
- POJ 3259 Wormholes(Bellman Ford 单源最短路径(可求带负权边的))
- 【经典算法】Dijkstra单源最短路径算法
- 单源最短路径+最小花费生成树
- poj3159 Candies--单源最短路径&差分约束
- 有代价的单源最短路径
- 【算法】Bellman-Ford算法(单源最短路径问题)(判断负圈)
- SPFA 单源最短路径