图论Day3(模版-单源最短)
来源:互联网 发布:淘宝怎样申请退款 编辑:程序博客网 时间:2024/05/22 15:27
luogu3371.单源最短路径。
一道模版至极的模版题。
给出一个有向图,请输出从某一点出发到所有点的最短路径长度。
数据规模:时空限制:1000ms,128M
对于20%的数据:N<=5,M<=15
对于40%的数据:N<=100,M<=10000
对于70%的数据:N<=1000,M<=100000
对于100%的数据:N<=10000,M<=500000
还不是很懂spfa时间复杂度怎么求,在现学过的算法里,我朴素的floyed和dijkstra是毫无疑问会稳定地TLE的,所以还是不管三七二十一上了bellman-ford,居然能过……
下面是我历经风霜坎坷、跋山涉水、远道而来的代码。
(可以说是非常之惨了)
#include<bits/stdc++.h>using namespace std;struct edge{ int q,z,v;}e[500001];//边表。 int n,m,s;//点数、边数、起点。 int dis[500001]={};void bmf(){ for(int i=1;i<=n;i++) dis[i]=100000;//先全赋初值。 dis[s]=0; for(int i=1;i<=n;i++) { int flag=0; for(int j=1;j<=m;j++) { if(dis[e[j].z]>dis[e[j].q]+e[j].v) dis[e[j].z]=dis[e[j].q]+e[j].v,flag=1; } if(flag==0) break; } return;}//标准的bmf。int main(){ scanf("%d%d%d",&n,&m,&s); for(int i=1;i<=m;i++) { int x,y,v; scanf("%d%d%d",&x,&y,&v); e[i].z=y;e[i].q=x;e[i].v=v;//呵呵,是有向图,有向图,有向图,…… } bmf(); for(int i=1;i<=n;i++)if(dis[i]!=100000)printf("%d ",dis[i]); else printf("2147483647 ");//一个特判,具体看下面…… return 0;}
之所以说它历经风霜,是因为一开始这道题我的程序(在赋初值那一步直接赋了2147483647,结尾直接输出)会输出负数,万分迷茫的我查了三刻钟的错,后来才知道是没有“正数相加输出负数多半是溢出”这个基本常识,……。因为2147483647是个很大的数了,在计算路径的时候一加二加三四加就容易爆炸。最后,谢谢sj的特判赞助。
阅读全文
0 0
- 图论Day3(模版-单源最短)
- day3
- DAY3
- DAY3
- day3
- day3
- day3
- day3
- Day3
- day3
- day3
- Day3
- DAY3
- Day3
- DAY3
- day3
- Day3
- day3
- leetcode 129. Sum Root to Leaf Numbers 一个简单的DFS做法
- c++中模板使用时候typename和class的区别
- Kth Largest Element in an Array
- Oracle与MySQL的几点区别
- 合法的括号序列
- 图论Day3(模版-单源最短)
- Mysql数据库操作(一)----数据库(DDL)
- 使用Java自动拆装箱出现的一些意外和原理
- 【NY】括号配对
- JAVA环境配置
- 数据结构——Java实现栈
- 魔法币问题
- 五,ESP8266 TCP服务器多连接
- Hibernate的三种状态