单源最短路径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)
上一篇 2022年8月10日 下午8:00
下一篇 2022年8月10日 下午8:16


相关推荐

  • wing是什么_数独算法代码

    wing是什么_数独算法代码原题链接设有 N×N 的方格图,我们在其中的某些方格中填入正整数,而其它的方格中则放入数字0。如下图所示:某人从图中的左上角 A 出发,可以向下行走,也可以向右行走,直到到达右下角的 B 点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。此人从 A 点到 B 点共走了两次,试找出两条这样的路径,使得取得的数字和为最大。输入格式第一行为一个整数N,表示 N×N 的方格图。接下来的每行有三个整数,第一个为行号数,第二个为列号数,第三个为在该行、该列上所放的数。行和列编号从

    2022年8月9日
    9
  • 计算机三级数据库:课本知识点总结以及备考方案建议

    计算机三级数据库:课本知识点总结以及备考方案建议计算机三级(数据库)复习重点欢迎阅读我的计算机三级总结第一章数据库应用系统开发方法第二章需求分析第三章数据库结构设计(自底向上)第四章数据库应用系统功能设计与实现第五章UML与数据库应用系统第六章高级数据查询第七章数据库及数据库对象第八章数据库后台编程技术第九章安全管理第十章数据库运行维护与优化第十一章故障管理第十二章备份与恢复数据库第十三章大规模数据库架构第十四章数据…

    2022年6月18日
    33
  • SSH整合JPA+Mysql

    SSH整合JPA+Mysql

    2021年9月26日
    46
  • Sql Prompt 10激活成功教程[通俗易懂]

    Sql Prompt 10激活成功教程[通俗易懂]1.下载安装文件待审核…2.激活成功教程修改hosts文件(如若跳过此步骤,虽然可以激活成功教程成功,但是重启电脑之后,又得重新激活成功教程)首先系统HOSTS文件添加以下屏蔽网络HOSTS路径:C:\Windows\System32\drivers\etc127.0.0.1red-gate.com127.0.0.1www.red-gate.com127.0.0.1licensing.red-gate.com127.0.0.1productlogin.red-ga…

    2022年7月26日
    106
  • pyqt ui设计_python pyqt5界面开发

    pyqt ui设计_python pyqt5界面开发@[TOC)欢迎使用Markdown编辑器你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Markdown编辑器,可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计,将会带…

    2022年8月28日
    7
  • mysql创建数据库sql语句

    mysql创建数据库sql语句dropdatabase test pro createdataba test pro DEFAULTCHARA general ci 使用 utf8mb4 和创建表类似

    2026年3月18日
    2

发表回复

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

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