hihocoder 第二十五周 spfa 最短路
其实hihocoder里的题目目前大都是模板题啊-。-
这周的是SPFA,暑假的时候有看过SPFA,不过一直用的都是Dijkstra,感觉spfa要更加简洁一点~~,今天找了一份之前一直都看不太懂所以就没怎么用的模板==,今天耐下心来观摩最终还是看懂了hh。
============================================================
所以以后都用spfa吧~~~速度快&&避开了stl~~,写这个bolg主要是拿来记录模板的
#include <cstdio>
#include <iostream>
#include <queue>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long LL; const int maxn = 191111;//最大点数
const int maxe = maxn*20;//最大边数
int head[maxn];//记录点的头
int to[maxe],cost[maxe],next[maxe];//记录边的两边断点,边长; int n,m,st,ed,ecnt;//点数,边数,起始点,结束点,边数记录 void init() {//初始化
memset(head,0,sizeof(head));
ecnt = 1;
}
void add_edge(int u,int v,int c) {//添加边,姿势类似于链表的添加,是单向边,如果 是无向边的话要反向添加一次边
to[ecnt] = v;cost[ecnt] = c;next[ecnt] = head[u];head[u] =ecnt++;
}
LL dis[maxn];//每个点到起始点的最短距离
bool vis[maxn];//记录该点是否在更新当中的队列中 void SPFA() {
memset(dis,0x3f3f,sizeof(dis));
memset(vis,0,sizeof(vis));
queue<int> que; que.push(st);
dis[st] = 0;
while(!que.empty()) {
int u = que.front(); que.pop();
vis[u] = false;
for(int p = head[u];p;p = next[p]) {
int &v = to[p];
if(dis[v]==-1||dis[v] > dis[u] + cost[p]) {
dis[v] = dis[u] + cost[p];
if(!vis[v]) que.push(v);//如果不在更新队列中,将该点加入
vis[v] = true;//加入更新队列当中
}
}
}
}
int main() {
scanf("%d%d%d%d",&n,&m,&st,&ed);
init();
while(m--) {
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
add_edge(a,b,c);
add_edge(b,a,c);
}
SPFA();
printf("%d\n",dis[ed]);
return 0;
}
hihocoder 第二十五周 spfa 最短路的更多相关文章
- Python学习笔记第二十五周(Django补充)
1.render_to_reponse() 不同于render,render_to_response()不用包含request,直接写template中文件 2.locals() 如果views文件中 ...
- 【hihoCoder第十五周】最近公共祖先·二
老实说我没有读题,看见标题直接就写了,毕竟hiho上面都是裸的算法演练. 大概看了下输入输出,套着bin神的模板,做了个正反map映射,但是怎么都得不了满分.等这周结束后,找高人询问下trick. 若 ...
- 第十四,十五周PTA作业
1.第十四周part1 7-3 #include<stdio.h> int main() { int n; scanf("%d",&n); int a[n]; ...
- 201771010134杨其菊《面向对象程序设计(java)》第十五周学习
第十五周学习总结 第一部分:理论知识 JAR文件: 应用程序首选项存储: Java Web Start JAR文件: 1.Java程序的打包:程序编译完成后,程序员将.class文件压缩打包为.jar ...
- 孤荷凌寒自学python第二十五天初识python的time模块
孤荷凌寒自学python第二十五天python的time模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 通过对time模块添加引用,就可以使用python的time模块来进行相关的时间操 ...
- 201271050130-滕江南-《面向对象程序设计(java)》第十五周学习总结
201271050130-滕江南-<面向对象程序设计(java)>第十五周学习总结 博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.c ...
- 201871010111-刘佳华《面向对象程序设计(java)》第十五周学习总结
201871010111-刘佳华<面向对象程序设计(java)>第十五周学习总结 实验十三 Swing图形界面组件(二) 实验时间 2019-12-6 第一部分:理论知识总结 5> ...
- 201871010123-吴丽丽《面向对象程序设计(Java)》第十五周学习总结
201871010123-吴丽丽<面向对象程序设计(Java)>第十五周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...
- 201871010104-陈园园 《面向对象程序设计(java)》第十五周学习总结
201871010104-陈园园 <面向对象程序设计(java)>第十五周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...
随机推荐
- 大数据学习——关于hive中的各种join
准备数据 2,b 3,c 4,d 7,y 8,u 2,bb 3,cc 7,yy 9,pp 建表: create table a(id int,name string) row format delim ...
- IDEA maven 无法加载已经安装的模块依赖包
今天打包一直报如下错误 Reactor Summary for freechain-op 1.0.1.OP: [INFO] [INFO] freechain-op .................. ...
- 省市区名称code
https://blog.csdn.net/hichinamobile/article/details/51725090 --省 create table t_base_provinces( id ) ...
- Python+selenium常用方法(Webdriver API)
小编整理了目前学习的Python+selenium常用的一些方法函数,以后有新增再随时更新. 加载浏览器驱动: webdriver.Firefox() 打开页面:get() 关闭浏览器:quit() ...
- Hadoop异常总结
版权声明:本文为yunshuxueyuan原创文章.如需转载请标明出处:http://www.cnblogs.com/sxt-zkys/QQ技术交流群:299142667 Hadoop异常总结 had ...
- [Go]通道(channel)的基本操作
通道类型是Go语言自带的.唯一一个可以满足并发安全性的类型,在声明并初始化一个通道时,需要用到内建函数make,传给make函数的第一个参数应该代表通道的具体类型的类型字面量. 如类型字面量 chan ...
- .NET下 JSON 的一些常用操作
1.JSON的序列化和反序列化 Newtonsoft.Json dll 下载地址http://json.codeplex.com/ using System; using System.Collect ...
- 关于srand()rand()的用法
转自:http://baike.baidu.com/link?url=bhos65ZKp8lEq_6chSsmQv29jHrqjN_IFGVMNod6BuicQ-3oCP5VsEn3RBjXBPvA7 ...
- js获取json属性值的两种方法
1.json.XXX 2.json["XXX"] 第二种方法使用场景,当属性值是变量时.如图所示:
- 利用开源工具实现轻量级上网行为审计(来源ispublic.com)
https://blog.csdn.net/cnbird2008/article/details/5875781