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;
}
时间: 2024-10-12 13:00:03

hihocoder 第二十五周 spfa 最短路的相关文章

hiho一下 第二十五周(SPFA)

时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 万圣节的晚上,小Hi和小Ho在吃过晚饭之后,来到了一个巨大的鬼屋! 鬼屋中一共有N个地点,分别编号为1..N,这N个地点之间互相有一些道路连通,两个地点之间可能有多条道路连通,但是并不存在一条两端都是同一个地点的道路. 不过这个鬼屋虽然很大,但是其中的道路并不算多,所以小Hi还是希望能够知道从入口到出口的最短距离是多少? 提示:Super Programming Festival Algorithm. 输入 每个测试点

【hihoCoder第十五周】最近公共祖先&#183;二

老实说我没有读题,看见标题直接就写了,毕竟hiho上面都是裸的算法演练. 大概看了下输入输出,套着bin神的模板,做了个正反map映射,但是怎么都得不了满分.等这周结束后,找高人询问下trick. 若是有人找出了错误,或是发现代码中的不足,求指出.感激!~ 以下是个人80分的代码. 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 const int MAXN = 1000010; 5 int rmq[2 * MAXN]; //rmq数

hihocoder 第二十九周 堆优化的Prim算法

又深刻理解了一遍prim和dijkstra算法,感觉蛮棒的~ 第一次自己用邻接表写,just soso~ 啊哈~ 一开始被优先队列,重载运算符给卡住了~ 蛋疼~ 1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<cstring> 5 #include<string> 6 #include<queue> 7 #include<algorit

信息安全系统设计基础第十五周总结

信息安全系统设计基础第十五周总结 [内容:链接汇总] 一.每周读书笔记链接汇总 [第一周读书笔记] http://www.cnblogs.com/shadow135211/p/4824555.html [第二周读书笔记] http://www.cnblogs.com/shadow135211/p/4842258.html [第三周读书笔记] http://www.cnblogs.com/shadow135211/p/4854920.html [第四周读书笔记] (读书笔记从“第一周”开始命名,为

2017-2018-1 学号20155209 《信息安全系统设计基础》第十五周学习总结

2017-2018-1 学号20155209 <信息安全系统设计基础>第十五周学习总结 20155209 <信息安全系统设计基础>课程总结 每周作业链接汇总 第一周 简要内容:完成实验楼课程资料:实验二内内容 第二周 简要内容:完成课上没完成的内容 第二周续 简要内容:完成myod 第三周 简要内容:学习教材第二章<信息的表示和处理> 第四周 简要内容:补充完成课上没有完成的内容和课后head,tail的使用. 第五周 简要内容:学习教材教材:第三章<程序的机器级

张季跃 201771010139《面向对象程序设计(java)》第十五周学习总结

张季跃 201771010139<面向对象程序设计(java)>第十五周学习总结 第一部分:理论知识学习部分 第13章 部署应用程序: JAR文件: Java程序的打包:程序编译完成后,程序员 将.class文件压缩打包为.jar文件后,GUI界面 程序就可以直接双击图标运行. .jar文件(Java归档)既可以包含类文件,也可 以包含诸如图像和声音这些其它类型的文件. JAR文件是压缩的,它使用ZIP压缩格式. 清单文件 (1) 每个JAR文件中包含一个用于描述归档特征的清单文 件(mani

201771010125王瑜《面向对象程序设计(Java)》第十五周学习总结

201771010125王瑜<面向对象程序设计(Java)>第十五周学习总结 一.理论部分 1.Java程序的打包:程序编译完成后,程序员将.class文件压缩打包为.jar文件后,GUI界面程序就可以直接双击图标运行. 2..jar文件(Java归档)既可以包含类文件,也可以包含诸如图像和声音这些其它类型的文件.JAR文件是压缩的,它使用ZIP压缩格式. 3.jar命令格式: jar {ctxui} [vfm0Me] [jar-file] [manifest-file] [entry-poi

张云飞 201771010143 《面对对象程序设计(java)》第十五周学习总结

JAR文件 Java程序的打包:程序编译完成后,程序员 将.class文件压缩打包为.jar文件后,GUI界面 程序就可以直接双击图标运行. .jar文件(Java归档)既可以包含类文件,也可 以包含诸如图像和声音这些其它类型的文件. JAR文件是压缩的,它使用ZIP压缩格式 jar命令 jar命令格式: jar {ctxui} [vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ... Jar命令选项: – -c 创

每周进度条(第十五周)

第十五周进度条   第十五周 所花时间 1h 代码量(行)  100 博客量(篇)  1 学到的知识 对图片的处理 在Android程序中加入图片