单源最短路径dijkstra算法_tous les jours蛋糕

单源最短路径dijkstra算法_tous les jours蛋糕年轻的探险家来到了一个印第安部落里。在那里他和酋长的女儿相爱了,于是便向酋长去求亲。酋长要他用 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/169119.html原文链接:https://javaforall.net

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


相关推荐

  • mysql 如何解决字段不区分大小写的问题

    mysql 如何解决字段不区分大小写的问题mysql 如何解决字段不区分大小写的问题

    2022年4月24日
  • 代码保护(一) 几款加壳工具[通俗易懂]

    代码保护(一) 几款加壳工具[通俗易懂]DRMsoftEncryptEXE(有激活成功教程版)加密模式:非绑定模式—-加密后的文件不绑定用户电脑,但用户需要一个开启密码才可以打开绑定模式—-一机一码授权,加密后的文件不同用户电脑需要不同的开启密码无密码模式—-加密后的文件无需要开启密码即可运行,仅对原始文件做加密保护一码通模式—-采用相同秘钥和产品编号加密的不同文件,在同台电脑上只需认证一次特点:可以设置加密…

    2022年6月27日
  • python压缩文件夹为zip_python 压缩文件

    python压缩文件夹为zip_python 压缩文件本文仅供学习交流使用,如侵立删!联系方式及demo下载见文末zipfile压缩文件夹defzipDir(self,dirpath,outFullName):”””压缩指定文件夹:paramdirpath:目标文件夹路径:paramoutFullName:压缩文件保存路径+xxxx.zip:return:无”””zip=zipf

    2022年9月17日
  • JAVA MD5加密「建议收藏」

    JAVA MD5加密「建议收藏」一、什么是MD5加密MD5,全称为“MessageDigestAlgorithm5”,中文名“消息摘要算法第五版”,它是计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。严格来说,它是一种摘要算法,是确保信息完整性的。不过,在某种意义上来说,也可以算作一种加密算法。MD5算法具有很多特点:压缩性:任意长度的数据,算出的MD5值长度都是固

    2022年7月8日
  • rabbitmq使用mqtt协议[通俗易懂]

    rabbitmq使用mqtt协议[通俗易懂]提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、rabbitmq是什么?二、mqtt协议是什么?三、使用步骤1.引入库2.读入数据总结前言在网上学习物联网,发现有人可以用springboot+rabbitmq可以搭建物联网(IOT)平台,rabbitmq不是消息队列吗,原来rabbitmq有两种协议,消息队列是用的AMQP协议,而用在智能硬件中的是MQTT协议。一、rabbitmq是什么?示例:pandas是基于NumPy的一种工具,该工具是为了解

    2022年10月3日
  • VBScript经典教程以及函数手册

    VBScript经典教程以及函数手册   Vbs经典教程:   https://www.jb51.net/article/53280.htm   Vbs函数手册:   https://www.jb51.net/shouce/vbs/

    2022年6月29日

发表回复

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

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