成仙之路(spfa)

java实现SPFA算法 1 问题描述 何为spfa(Shortest Path Faster Algorithm)算法? spfa算法功能:给定一个加权连通图,选取一个顶点,称为起点,求取起点到其它所有顶点之间的最短距离,其显著特点是可以求含负权图的单源最短路径,且效率较高。(PS:引用自百度百科:spfa是求单源最短路径的一种算法,它还有一个重要的功能是判负环(在差分约束系统中会得以体现),在Bellman-ford算... 阅读详情

成仙之路

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <climits>
int L[200010];
using namespace std;

int MAXN=70000;
int p[70000];
bool inq[70000];
long long d[200010];
int INF=0x3f3f3f3f;

int eid;
int n,m;

struct edge {
    int v;
    int next;
    int w;
} e[500000];

int edgeinsert(int wei,int u,int v) {
    e[eid].v=v;
    e[eid].w=wei;
    e[eid].next=p[u];
    p[u]=eid++;
}

int init() {
    memset(p,-1,sizeof(p));
    eid=0;
}

void SPFA(int st,int level) {
    memset(inq,false,sizeof(inq));
    memset(d,INF,sizeof(d));

    d[st]=0;
    inq[st]=true;
    queue<int>q;
    q.push(st);

    while(!q.empty()) {
        int u=q.front();
        q.pop();
        inq[u]=false;
        for(int i=p[u]; i!=-1; i=e[i].next) {
            int v=e[i].v;
            if((L[v] >= level)&&(L[v] <= level+m)&&(d[u]+e[i].w<d[v])) { //只能和>=自己等级的精灵交易
                d[v]=d[u]+e[i].w;
                if(!inq[v]) {
                    q.push(v);
                    inq[v]=true;
                }
            }
        }
    }
    return;
}


int main() {
    //freopen("data.in","r",stdin);
    //freopen("data.out","w",stdout);
    ios::sync_with_stdio(false);

    init();
    cin>>m>>n;

    for(int i=1; i<=n; i++) {
        int p,x;
        cin>>p>>L[i]>>x;
        edgeinsert(p,0,i);
        while(x--) {
            int a,b;
            cin>>a>>b;
            edgeinsert(b,a,i);
        }
    }

    long long ans=INF;
    for(int level = L[1] - m; level <= L[1]; level++) { //蘑菇精的修为可以比成仙小M
        SPFA(0,level);
        ans=min(d[1],ans);
    }

    cout<<ans;
    return 0;
}

 

【SPFA】 素数路 题目描述 内阁大臣非常的沮丧,他收到了安全部长的消息:他们都需要改变办公空的四位房间号码。 安全部长:经常换换房间号码是出于安全方面的考虑,可以让敌人陷入迷惑。 内阁大臣:但是,我选择1033作为我的房间号是出于我个人的偏爱。我可是内阁大臣! 安全部长:你不就是喜欢素数么?我们给你安排了8179这个号码,你只需要贴四个新数字覆盖住以前的四个老数字就可以了。 内阁大臣:不行,没有那么容 阅读详情

相关推荐

hdu4889 spfa(造数据卡spfa

题目是给了你一个spfa+slf优化的程序,然后,让你造个数据卡掉他, 其实那个slf优化根本不算是优化,只是在某些图上可能会更好,但是可以通过直接构造图将其由原本spfa最坏nm的复杂度卡成2^n复杂度 至于具体的,这题是曹圣 (http://blog.youkuaiyun.com/jinzhao1994) 给我讲的,他那里写的很详细,我就直接copy了

Durandal的专栏 3849

计蒜客成仙之路

问题描述有个蘑菇精想要成仙,但是他必须要收集10000个精灵宝石,不过他要是有花精灵的泪水,就只要8000个精灵宝石就可以了,或者如果他有花精灵的血滴,就只要5000个精灵宝石便可以成仙了。蘑菇精可以和森林里的其他精灵交换东西,但是修为等级差距过大的交换会影响修炼蘑菇精就跑到花精灵那里,向他索要泪水或血滴,花精灵要他用精灵宝石来换,或者替他弄来其他的东西,他可以降低价格。蘑菇精于是又跑到其他地方,...

李小原的博客 554

最小费用最大流——SPFA

模板题 首先什么是最大流 这里不详细赘述,需要的点这里 最小费用最大流概念 费用流中,网络上的每一条边都会比普通网络流中的边多一个属性——单位费用(这里边i的费用记为co[i])。也就是说,一旦流经边i的流量增加k,那么这条边的费用就会增加co[i]*k。开始时每条边的费用为0。 在一个网络中,一个流的总费用定义为其流经的每条边的费用之和。 根据我的理解,最小费用最大流(以下简称“最最”)其实是“...

weixin_44123382的博客 1649

【spfa】成仙之路

问题描述有个蘑菇精想要成仙,但是他必须要收集10000个精灵宝石,不过他要是有花精灵的泪水,就只要8000个精灵宝石就可以了,或者如果他有花精灵的血滴,就只要5000个精灵宝石便可以成仙了。蘑菇精可以和森林里的其他精灵交换东西,但是修为等级差距过大的交换会影响 修炼 蘑菇精就跑到花精灵那里,向他索要泪水或血滴,花精灵要他用精灵宝石来换,或者替他弄来 其他的东西,他可以降低价格。蘑菇精于是又跑到其他...

It's the Climb 362

Axure原型模板与元件库APP交互设计素材(附资料)

在Axure中,手机模型是展示APP或小程序界面效果的重要工具。通过导入手机模型元件,设计师可以更加直观地模拟真实设备的显示效果,从而更准确地评估设计的可行性和用户体验。Axure官方及第三方资源库中提供了多种品牌和型号的手机模型,如iPhone、Android等,设计师可以根据项目需求选择合适的模型进行使用。Axure作为一款强大的原型设计工具,为APP和小程序的设计与开发提供了丰富的界面组件元件库和交互设计素材。

招风的黑耳优快云 1981

伺服驱动器485通信

485通信使用方法,485通信在上位机和伺服驱动器之间的应用,根据需要驱动电机旋转。

haipi511715316的博客 1万+

登山成仙

Andox的专栏 531

(project generation have a problem)STM32CubeMX生成工程一直报错项目生成有问题[玄学三步解]

解决办法 第一步,检查自己是不是真的配置的不对,JAVA安装没,pack路径设置的对不对,这里有一位前辈的博文写的非常好,附加链接https://blog.youkuaiyun.com/ybhuangfugui/article/details/52225736#commentBox 第二步,如果按照前辈的博文设置的都一模一样,还是不对,想我下图这样。 那你来对地方了 方法很简单,你把你生成工程文件的路径彻底的...

展桑博客-BenjieBlog 2923

最短路习题(二)

6.成仙之路 有个蘑菇精想要成仙,但是他必须要收集10000个精灵宝石,不过他要是有花精灵的泪水,就只要8000个精灵宝石就可以了,或者如果他有花精灵的血滴,就只要5000个精灵宝石便可以成仙了。蘑菇精可以和森林里的其他精灵交换东西,但是修为等级差距过大的交换会影响修炼蘑菇精就跑到花精灵那里,向他索要泪水或血滴,花精灵要他用精灵宝石来换,或者替他弄来其他的东西,他可以降低价格。蘑菇精于是又跑到...

微凉的博客 399

记录Nvidia AGX Orin的配置日常(二)设置上电自动开机和远程桌面

因为要拿AGX作为机器人的主控板,所以需要给他设置一下通电后无需按电源键就自动开机,然后再配置一下远程桌面。

AutomaticForever的博客 1361

qt下使用grpc编程(2) —— 练手!自己改的一个简单小例子!1

(1)在研究了grpc官方提供的helloworld例程后,自己试着写了个小程序。 (2)编写proto文件。 proto文件用于定义服务和消息,用protobuf的语法编写,protobuf是一种通信协议,详细请百度。下面附上源码: syntax = "proto3"; option java_multiple_files = true; option java_pac

u011099079的博客 3925

Linux 用户线程切换分析

Linux内核利用esp ebp实现用户栈的切换,并通过eip的跳转来实现用户级线程的切换,简单分析如下

ccshijtgc的专栏 2546

【车载以太网】Eth Stack Bringup

摘要:本文基于AUTOSAR架构,详细介绍了在TC3xx硬件平台上实现EthStack Bringup的全过程。作者通过配置MCAL和Davinci工具,完成了EthTrcv、Eth、EthIf、EthSM和TcpIp等模块的集成,并解决了16字节内存对齐和以太网速率不匹配等问题。最终实现了PC端与开发板的Ping通,并通过WireShark验证了数据包收发。文章总结了调试中的关键问题与解决方案,强调了实践的重要性,为后续EthStack的深入分析奠定了基础。

qq_36056498的博客 182

成仙之路spfa

解题说明:反向建图,从终点1(成仙)开始搜索,遇到一个节点就算出,到这个节点代价(路程代价dis[i])+self[i](自身代价)找出最小的那个节点就行。ac代码:#include&lt;cstdio&gt; #include&lt;string.h&gt; #include&lt;algorithm&gt; #include&lt;vector&gt; #include&lt;queue&gt...

zxker 259

使用MATLAB结合EasySpin进行ESR模拟的详细步骤及示例代码

安装EasySpin:确保你已经安装了EasySpin工具箱,它可以帮助你进行ESR模拟。你可以从EasySpin的官方网站(https://easyspin.org/)下载并安装。准备实验数据:将实验得到的EPR数据整理成合适的格式,一般包含磁场(Magnetic Field)和信号强度(Intensity)两列。进行模拟:使用EasySpin的函数对单线态氧自由基和超氧自由基进行模拟。调整参数:通过调整模拟参数,使模拟得到的峰型和峰位置与实验数据尽可能匹配。导出数据。

AI的内部世界的博客 2005

使用Google Earth Engine(GEE)的Python API,您可以将经纬度坐标转换为Landsat影像的路径/行号

使用Google Earth Engine(GEE)的Python API,您可以将经纬度坐标转换为Landsat影像的路径/行号。在这个示例中,我们选择了一个位于加利福尼亚州旧金山市附近的点,其经度为-122.084,纬度为37.421998。首先,我们需要导入必要的库和模块。接下来,我们定义一个函数,该函数将接收经度和纬度作为输入,并返回对应的Landsat路径/行号。最后,我们提取路径和行号的值,并将它们作为结果返回。现在,我们可以使用这个函数来获取特定点的Landsat路径/行号。

VwajAlgorithm的博客 349

SPFA求最大路

求最长路可以将边权乘以-1,然后求最短路即可,之后最短路取相反数就是最大路。 SPFA板子 vector<int>v[MAX_N],w[MAX_N]; int have[MAX_N],dis[MAX_N]; void spfa(int be){ int i; queue<skt>q; skt k; have[be]=true; k.x...

EDGiboy的博客 725

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

SPFA算法

一.算法简介 SPFA(Shortest Path Faster Algorithm)算法是求单源最短路径的一种算法,它是Bellman-ford的队列优化,它是一种十分高效的最短路算法。 很多时候,给定的图存在负权边,这时类似Dijkstra等算法便没有了用武之地,而Bellman-Ford算法的复杂度又过高,SPFA算法便派上用场了。SPFA的复杂度大约是O(kE),k是每个点的平均进队次数(...

孙荣达的博客 2万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【图论】SPFA

讲解SPFA

OI博客 1843

spfa算法

spfa算法简介 spfa算法是shortest path fastest algorithm的缩写。再通常情况下,是一种比较高效的求解最短路的算法。spfa的本质是广度优先搜索,将图所有的边都遍历一遍。时间复杂度是O(m),其中m是图的边数。 spfa算法的用途 spfa算法用来解决单源最短路问题,可以求解从某个点开始,到图中其他所有点的最短距离。 spfa算法的实现步骤 实现spfa算法需要一个队列q,一个标记数组vis[N]用来标记某点是否已经被搜索过。数组dist[N],用来存储起点到..

qq_41729237的博客 1万+

spfa

文章目录前言一、什么是spfa算法二、例题,代码1.AcWing 851. spfa求最短路本题分析AC代码2.AcWing 852. spfa判断负环本题分析AC代码三、时间复杂度 前言 复习acwing算法基础课的内容,本篇为讲解基础算法:spfa,关于时间复杂度:目前博主不太会计算,先鸽了,日后一定补上。 一、什么是spfa算法 计算最短路算法的一种,spfa算法可以说是bellman-ford算法的算法优化版本,相较于Dijkstra算法,它可以计算有负权边的最短路,下图来自ACWing算法基.

佛系更新 1532

计蒜客习题:成仙之路

问题描述 有个蘑菇精想要成仙,但是他必须要收集10000个精灵宝石,不过他要是有花精灵的泪水,就只要8000个精灵宝石就可以了,或者如果他有花精灵的血滴,就只要5000个精灵宝石便可以成仙了。蘑菇精可以和森林里的其他精灵交换东西,但是修为等级差距过大的交换会影响 修炼 蘑菇精就跑到花精灵那里,向他索要泪水或血滴,花精灵要他用精灵宝石来换,或者替他弄来 其他的东西,他可以降低价格。蘑...

LiuKairui的博客 1305

spfa费用流java_EK-SPFA费用流 总结+模板——【【模板】最小费用最大流】

【用途】每一条边增加一个参数:每个单位流量的费用;求解在最大流的情况下最小的费用。【主要思路】EK算法,即SPFA+增广路在图上以费用为边权跑SPFA:在更新的过程中,如果更新成功,那么顺便进行往下一个结点尽可能多地流水,并且把流水的路径记录下来(pre[v]=u->v的边)。跑完SPFA后,顺着之前记录的路径从汇点溯回到源点,并且进行增广路。最小的总费用就是累计 (当前路径所流总量) ...

weixin_36326008的博客 213

如何卡SPFA

由于一个校内最短路题数据太水,于是就和司机一起研究如何卡SPFA... 卡SPFA的基本思路是弄一个网格图,然后这个网格图行比列小得多,比如10*10000之类的... 然后对于竖着的边边权就设多么小,然后横着的边权就设多么大(比如1和rand()%10000+10) 还可以在图里随机加一些奇怪的边. 然后对于点个数1e5,边个数2e5的有向图,随机或随机+SLF的SPFA就被卡到了入队1

yfzcsc的博客 1万+

SPFA判负环

SPFA和Dijkstra都是解决最短路问题的算法,都有各自的特点: SPFA: 1.可以判断是否存在负环 2.按层级松弛 3.有些数据可以卡掉SPFA Dijkstra: 1.效率稳定 2.不可以解决负边、负环的图 一般处理无负边的最短路问题时,使用Dijkstra。在判断是否存在负环的时候使用SPFA。这里主要讲如何使用SPFA判断正负环。 原理 1.一个n个点的连通图中,经过n-1条边肯定可...

陈颜的博客 6106
上一篇: 闯关游戏(spfa)
下一篇: 蒜头君的银行卡(差分)
ccshijtgc
博客等级 码龄20年 13粉丝 181原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值