单源最短路径dijkstra算法_dijkstra是谁

单源最短路径dijkstra算法_dijkstra是谁年轻的探险家来到了一个印第安部落里。在那里他和酋长的女儿相爱了,于是便向酋长去求亲。酋长要他用 10000 个金币作为聘礼才答应把女儿嫁给他。探险家拿不出这么多金币,便请求酋长降低要求。酋长说:”嗯,如果你能够替我弄到大祭司的皮袄,我可以只要 8000 金币。如果你能够弄来他的水晶球,那么只要 5000 金币就行了。”探险家就跑到大祭司那里,向他要求皮袄或水晶球,大祭司要他用金币来换,或者替他弄来其他的东西,他可以降低价格。探险家于是又跑到其他地方,其他人也提出了类似的要求,或者直接用金币换,或

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

年轻的探险家来到了一个印第安部落里。

在那里他和酋长的女儿相爱了,于是便向酋长去求亲。

酋长要他用 10000 个金币作为聘礼才答应把女儿嫁给他。

探险家拿不出这么多金币,便请求酋长降低要求。

酋长说:”嗯,如果你能够替我弄到大祭司的皮袄,我可以只要 8000 金币。如果你能够弄来他的水晶球,那么只要 5000 金币就行了。”

探险家就跑到大祭司那里,向他要求皮袄或水晶球,大祭司要他用金币来换,或者替他弄来其他的东西,他可以降低价格。

探险家于是又跑到其他地方,其他人也提出了类似的要求,或者直接用金币换,或者找到其他东西就可以降低价格。

不过探险家没必要用多样东西去换一样东西,因为不会得到更低的价格。

探险家现在很需要你的帮忙,让他用最少的金币娶到自己的心上人。

另外他要告诉你的是,在这个部落里,等级观念十分森严。

地位差距超过一定限制的两个人之间不会进行任何形式的直接接触,包括交易。

他是一个外来人,所以可以不受这些限制。

但是如果他和某个地位较低的人进行了交易,地位较高的的人不会再和他交易,他们认为这样等于是间接接触,反过来也一样。

因此你需要在考虑所有的情况以后给他提供一个最好的方案。

为了方便起见,我们把所有的物品从 1 开始进行编号,酋长的允诺也看作一个物品,并且编号总是 1。

每个物品都有对应的价格 P,主人的地位等级 L,以及一系列的替代品Ti和该替代品所对应的”优惠” Vi。

如果两人地位等级差距超过了 M,就不能”间接交易”。

你必须根据这些数据来计算出探险家最少需要多少金币才能娶到酋长的女儿。

输入格式
输入第一行是两个整数 M,N,依次表示地位等级差距限制和物品的总数。

接下来按照编号从小到大依次给出了 N 个物品的描述。

每个物品的描述开头是三个非负整数 P、L、X,依次表示该物品的价格、主人的地位等级和替代品总数。

接下来 X 行每行包括两个整数 T 和 V,分别表示替代品的编号和”优惠价格”。

输出格式
输出最少需要的金币数。

数据范围
1≤N≤100,
1≤P≤10000,
1≤L,M≤N,
0≤X<N
输入格式
1 4
10000 3 2
2 8000
3 5000
1000 2 1
4 200
3000 2 1
4 200
50 2 0
输出格式
5250

题解
最短路

#include<bits/stdc++.h>
using namespace std;
const int N = 1e2 + 10;
const int M = 2e4 + 10;
typedef pair<int,int>PII;
#define x first
#define y second
struct Edge{ 
   
    int v,next,w;
}edge[M];
int st[N],value[N];
int dist[N],vis[N];
const int INF = 0x3f3f3f3f;
int n;
int head[N],cnt;
void add(int u,int v,int w){ 
   
    edge[cnt].v = v;
    edge[cnt].w = w;
    edge[cnt].next = head[u];
    head[u] = cnt ++;
}
int dijstra(int s,int low,int high){ 
   
    priority_queue<PII,vector<PII>,greater<PII> >pq;
    memset(dist,INF,sizeof dist);
    memset(vis,0,sizeof vis);
    dist[s] = 0;
    pq.push({ 
   dist[s],s});
    while(!pq.empty()){ 
   
        int t = pq.top().y;
        pq.pop();
        if(vis[t])continue;
        vis[t] = true;
        for(int i= head[t];~i;i = edge[i].next){ 
   
            int v = edge[i].v,w = edge[i].w;
            if(vis[v] || st[v] < low || st[v] > high)continue;
            if(dist[v] > dist[t] + w){ 
   
                dist[v] = dist[t] + w;
                pq.push({ 
   dist[v],v});
            }
        }
    }
    int res = INF;
    for(int i = 1;i <= n;i ++){ 
   
        res = min(res,dist[i] + value[i]);
    }
    return res;
}
int main(){ 
   
    int K,P,L,X,x,w;
    cin>>K>>n;
    memset(head,-1,sizeof head);
    for(int i = 1;i <= n;i ++){ 
   
        cin>>value[i]>>st[i]>>X;
        for(int j = 0;j < X;j ++){ 
   
            cin>>x>>w;
            add(i,x,w);
        }
    }
    int res = INF;
    for(int low = st[1] - K;low <= st[1];low ++){ 
   
        int high = low + K;
        res = min(res,dijstra(1,low,high));
    }
    cout<<res<<endl;
    
    return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168631.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python输入两个集合取并集_python交集并集差集

    python输入两个集合取并集_python交集并集差集第一种方法:使用python基本数据结构set集合。优点:集合运算长度可以不一致,运算效率高缺点:两个进行运算的集合中不能够含有重复的元素,如果含有的话,转成set集合后,会自动去掉重复元素a=[1,2,3]b=[1,2,6,9,12]print(set(a)&set(b))#交集print(set(a)|set(b))#并集print(set(a)^set(b))#异或,就是两个集合去掉交集的那部分print(set(a)-set(b))#差集,就

    2022年10月6日
  • SPI接口总结「建议收藏」

    SPI接口总结「建议收藏」一、SPI协议【SerialPeripheralInterface】    串行外围设备接口,是一种高速全双工的通信总线。在ADC/LCD等与MCU间通信。1、SPI信号线    SPI包含4条总线,SPI总线包含4条总线,分别为SS、SCK、MOSI、MISO。(1)SS(SlaveSelect):片选信号线,当有多个SPI设备与MCU相连时,每个设备的这…

    2022年6月18日
  • java前端和后端的区别[通俗易懂]

    java前端和后端的区别[通俗易懂]java”前端”是与用户直接交互的部分,包括你在浏览网页时接触的所有视觉内容–从字体到颜色,以及下拉菜单和侧边栏。这些视觉内容,都是由浏览器解析、处理、渲染相关HTML、CSS、Javascript文件后呈现而来。java后端开发者使用这些工具编写干净、可移植、具有良好文档支持的代码来创建或更新Web应用。但在写代码之前,他们需要与客户沟通,了解其实际需求并转化为技术目标,制定最有效且精简的方案来进行实现。 java”前端”开发,就是要创造上面提到的网站面向用户的部分背后的代码,并.

    2022年7月9日
  • js将docx转换为html,js实现word转换为html[通俗易懂]

    js将docx转换为html,js实现word转换为html[通俗易懂]前言最近接到一个需求,实现上传一个word文档,然后将该word转换成html丢给服务端存上。进行技术调研后发现有三种方法可以实现这个功能:ActiveXObject、docx2html、mammoth。IE的ActiveXObjectvaroWordApp=newActiveXObject(“Word.Application”);varoDocument=oWordApp.Docum…

    2022年7月17日
  • CentOS7 64位安装mysql教程,亲测完美

    CentOS7 64位安装mysql教程,亲测完美从最新版本的linux系统开始,默认的是Mariadb而不是mysql!这里依旧以mysql为例进行展示1、先检查系统是否装有mysqlrpm-qa|grepmysql1这里返回空值,说明没有安装这里执行安装命令是无效的,因为centos-7默认是Mariadb,所以执行以下命令只是更新Mariadb数据库yuminstallmysql1删除可用yumremovemysql12、下

    2022年5月20日
  • 数据分析——多重共线性检验

    数据分析——多重共线性检验在做线性回归的时候,一般分为以下几个步骤:1、画散点图,简单的查看是否存在线性关系(3D以下)2、线性模型跑一遍试试效果3、其中需要查看以下几个指标:3.1正太分布检验3.1多重共线性3.2变量显著性3.4拟合效果4、解释变量上面一篇文章了解了如何利用t检验进行变量的显著性检验,下面着重学习如何进行多重共线性的检验一、辅助…

    2022年5月18日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号