POJ 1062 昂贵的聘礼 迪杰斯特拉的变形

Python语言编写的Dijkstra算法 这是一个用Python写的Dijkstra算法,放在python3.x系列中即可运行,用于求解最短路径问题。可以求解大概10个节点的无向完全图。 立即下载

题意: 题目是中文,字面意思大家应该都看得懂,这里面有两个注意点!!首先,探险家没必要用多样东西去换一样东西,因为不会得到更低的价格。这句话告诉我们探险家只会买一件物品,然后一级级的交换上去直到交换到酋长的物品为止。 其次,地位差距超过一定限制的两个人之间不会进行任何形式的直接接触,包括交易。(他是一个外来人,所以可以不受这些限制。但是如果他和某个地位较低的人进行了交易,地位较高的的人不会再和他交易,他们认为这样等于是间接接触,反过来也一样。)这句话其实是有歧义的,真正的意思是,某个地位的人可以和差距它地位为m的人交易,即假设这人地位为 p,他可以和[p-m,p+m]之间的人进行交易!!!

分析: 某个物品用其替代品替代,所以可以在替代品与原物品之间连一条边,边的权值即为优惠价格(先不考虑地位的差距)
然后我们就可以建成一张图,很明显,终点为物品1,起点为除了物品1之外的任何点,找当中路径权值之和最小的。(每次选取每个物品为起点时,就说明你买了这件物品,所以要加上这件物品的价格!)
这里写图片描述,

这里写图片描述

现在考虑地位限制,这里假设限制为0。
这里写图片描述

另一种情况,现在地位限制为 1.
这里写图片描述

即一条路径中 | 最小地位-最大地位 | <= 地位限制

我第一次做的时候的想法是在寻找最短路的同时记录路径中最大的地位与最小的地位然后每次到一个点时都判断是否更新最小地位或最大地位,更新后的差值是否会超过地位限制,虽然通过了许多的测试样例,但这里有一种情况就过不去。
这里写图片描述

我又想把最小地位与最大地位跟着最短路径一起更新,但又会出现一个问题

这里写图片描述

每次更新一个点时,该是选价值最小的还是选地位差距最小的呢?这难以判断。
所以宣告这种想法破产。。。。(一晚上的青春啊。。。)

然后认真想了想,最终都要想法设法走到物品1,即最短路径中一定包含物品1,那最短路径中的物品1的等级一定包含于[最小地位,最大地位]之间。
假设地位差距为m,那么只要枚举地位差距的区间(此区间一定包含物品1),假设物品1地位为p,这里依次枚举区间的下界,最下界为 p-m,此时的上界为p。最大下界为p,此时上界为p+m。

路径中的点只要在这范围内都合法。

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cmath>
using namespace std;
struct edge{
    int from,to,cost;
};
int m,n;
struct peo{
    int money, pos; // 第i个物品的价值和等级
}ver[110];
vector<edge> G[110];
void addedge(int from,int to,int cost){
    G[from].push_back((edge){from,to,cost});
}
struct hep{
    int d,v;
    bool operator < (const hep& rhs)const{
        return d > rhs.d;
    }
};
int dis[110];
int solve(int low){
    int ans = 1<<30;
    for(int k = 0; k < n; ++k){//依次选每一个物品
        for(int j = 0; j < n; ++j)
            dis[j] = ver[j].money; //赋值各物品的价格。
        priority_queue<hep> que;
        que.push((hep){0,k});
        while(!que.empty()){
            hep x = que.top(); que.pop();
            if(dis[x.v] < x.d) continue;
            for(int i = 0; i < G[x.v].size(); ++i){
                edge& e = G[x.v][i];
                if(dis[e.to] > dis[x.v] + e.cost && ver[e.from].pos >= low && ver[e.from].pos <= low+m){
                    dis[e.to] = dis[e.from]+e.cost;
                    que.push((hep){dis[e.to],e.to});
                }
            }
        }
        ans = min(ans,dis[0]);
    }

    return ans;
}

int main(){
   //  freopen("/Users/user/Desktop/1.txt","r",stdin);
    cin >> m >> n;
    for(int i = 0; i < n; ++i){
        cin >> ver[i].money >> ver[i].pos ;
        int bian; cin >> bian;
        for(int j = 0; j < bian; ++j){
            int to,cost; cin >> to >> cost; to--;
            addedge(to,i,cost);
        }
    }
    int ans = 1<<30;
    for(int i = ver[0].pos-m; i <= ver[0].pos; ++i){
    //枚举地位区间

        ans = min(ans,solve(i)); // 获得最优解
    }
    cout << ans << endl;
    return 0;
}

android10 部分机型(华为)无法正常更新安装app android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=file://storage/emulated/0/文件夹名/***.apk typ=application/vnd.android.package-archive } 阅读详情

相关推荐

波动性GARCH模型与波动率预测(代码+结果分析)

本文介绍的ARCH、GARCH模型可以刻画出随时间变化的条件异方差。

celiaweiwei的博客 2万+

pku1062 昂贵的聘礼(Memory Limit Exceeded。。。。。。)

 /*昂贵的聘礼Time Limit: 1000MS        Memory Limit: 10000KTotal Submissions: 8052        Accepted: 1922Description年轻的探险家来到了一个印第安部落里。在那里他和酋长的女儿相爱了,于是便向酋长去求亲。酋长要他用10000个金币作为聘礼才答应把女儿嫁给他。探险家拿不出这

zonelight的专栏 1984

英飞凌TC397芯片时钟树详解:从EB-tresos配置到PLL锁相环实战避坑

本文详细解析了英飞凌TC397芯片的时钟树架构,从EB-tresos配置到PLL锁相环的实战应用,帮助工程师避免常见配置陷阱。文章深入探讨了时钟源层、频率转换层和分配网络层的设计原理,提供了PLL配置的数学公式和EB-tresos关键容器的配置要点,并分享了调试技巧与性能优化实践,适用于MCU开发中的时钟管理需求。

weixin_42524226的博客 211

POJ1125-Dijkstra算法

题意: 给出若干个联系人,及每个联系人通知其他联系人所需的时间,求从哪个联系人开始通知所用时间最短,并求出最短时间。 很明显是图论中求最短路径问题,可以用floyd 算法或者Dijkstra算法。我这里分别用两种方法实现。 方法一:Dijkstra算法。 只要遍历每个人,对每个人都以他为起点调用Dijkstra算法,求出最长时间(注意这道题一个联系人可以同时通知多个联系 人,所以求出他...

你若是天才,我便做疯子 249

Python爬虫实战:用Selenium+ChromeDriver批量抓取政府网站政策文件(附完整代码)

本文详细介绍了使用Python的Selenium和ChromeDriver进行政府网站政策文件批量抓取的实战技巧。从环境配置、动态页面元素定位到分页机制破解和反爬虫策略,提供了完整的解决方案和代码示例,帮助开发者高效获取结构化政策数据。

weixin_42531710的博客 265

GNSS气象学入门:从ZTD到PWV的水汽反演全流程解析(含精度评估)

本文详细解析了GNSS气象学中从ZTD到PWV的水汽反演全流程,包括基础概念、反演原理、数据处理步骤及精度评估方法。通过PRIDE软件和MATLAB代码示例,展示了如何高效提取ZTD数据并结合ERA5气象数据进行PWV计算,为气象研究和业务应用提供了实用指南。

weixin_28707365的博客 572

Dijkstra-POJ-1502-MPI Maelstrom

MPI Maelstrom Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7182 Accepted: 4375 DescriptionBIT has recently taken delivery of their new supercomputer, a 32 processor Apollo Ody

懒鬼的私人泳池 769

别再只画版图了!用ADS RFPro的Circuit模型,快速评估滤波器加电容后的性能变化

本文详细介绍了如何利用ADS RFPro的Circuit模型功能,实现射频滤波器设计中版图与集总元器件的高效协同仿真。通过混合仿真技术,工程师可以快速评估滤波器加电容后的性能变化,大幅缩短设计迭代周期,提升工作效率。文章还提供了实战案例和高级技巧,帮助读者掌握这一创新设计方法。

weixin_28559803的博客 257

hdu 3790 迪杰斯特拉变形题

最短路径问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 30322    Accepted Submission(s): 8973 Problem Description 给你n个点,m条无向边,每条边都有长

Singular__point的博客 428

Unity开发AR之Vuforia-MultiTarget笔记

在增强现实(AR)技术蓬勃发展的今天,越来越多的开发者开始探索如何将AR应用于各种场景中。Vuforia作为一个领先的AR开发平台,为开发者提供了强大的工具和功能,使得创建AR体验变得更加简单和直观。本文将为您介绍Vuforia的基本概念、特点,以及如何配置和使用MultiTarget功能,旨在帮助您更加深入地理解Vuforia SDK,并在您的项目中有效地应用。Vuforia是一个由PTC开发的增强现实SDK,它提供了丰富的功能,使团队能够在各种设备上创建互动的AR应用。

TxNet 1049

ABAP Development Tool for Visual Studio Code 里使用 MCP server

本文讨论了SAP ABAP开发环境中,除GitHub Copilot外,其他可作为MCP客户端接入ABAP开发工具(MCP server)的编码代理(coding agent)。GitHub Copilot是官方确认可用的工具,而其他代理如Claude Code、Cursor、Windsurf Cascade、Cline和Continue虽然理论上支持MCP协议,但要实际用于ABAP开发还需满足两个关键条件:兼容MCP协议,并能处理VS Code虚拟工作区文件系统。这些工具需要单独验证是否支持ABAP开发工

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 255

POJ 1062 昂贵的聘礼详解最短路变形

POJ上难得一见的中文题…… 思路:建立一个以0为源点的地图,那么Map[0][n]的值代表 第n号物品的价值,Map[i][j]代表用 j 替代 i 后,物品j的价值。我们认为酋长的承诺为节点 ‘1’ ,则我们需要做的就是通过一系列操作求出Map[0][1]的最小值,这时可以看出 这是一个最短路问题。题目还规定了,等级高的不会同意与等级低的交换,等级低的亦不会和高于自身m个级别的人交换,所以...

weixin_30793643的博客 120

SAP 成本分摊逻辑与案例(含具体数据)

摘要: SAP成本分摊通过**分配(Allocation)与分摊(Assessment)**两种方式,将间接成本中心费用按预设规则(如人数、工时、比例等)结转至直接成本对象。分配保留原始成本要素(如电费、工资),适用于需明细追踪的场景;分摊则打包为次级成本要素(如管理费用),简化核算。实操案例涵盖行政费用分配(按人数)、水电车间分摊(按工时)、机修作业分摊(作业成本法)及内部订单结算,系统通过KSV1/KSU1配置循环规则,KSV5/KSU5执行结转。关键点在于选择匹配业务的分摊基础,合理配置次级成本要素,

金牌架构师 550

POJ1062 昂贵的聘礼 单源最短路径变形 dijkstra算法

转自:http://blog.youkuaiyun.com/yangliuy/article/details/7173287

janvinal的专栏 540

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

POJ 2472 迪杰斯特拉计算最长路

需要注意的就是自己到自己是百分之百 其实用Floyd算法更加简便。因为时间限制是2秒。 #include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;algorithm&gt; #include&lt;cstring&gt; #include&lt;string&gt; #include&lt;map&gt; #include&lt;v...

兜率工的博客 2384

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Hduoj2112【字典树+迪杰斯特拉】

#include #include #include #include #define MAX 100000000 struct bus { int id; bus * next[54]; }root; int busid, dis[155][155], d[155], n; int getid(char *s) { int i, j, k, l; bus *p

乐着过一辈子的专栏 488

IDEA的使用指南

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

POJ1724 ROADS(深搜DFS,最短路,dijkstra,用优先队列优化)

题目: ROADS Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14825   Accepted: 5370 Description N cities named with numbers 1 ... N are connected w

riba2534的博客 3660

poj 1602 昂贵的聘礼

题目传送门//此题的关键在于等级限制的处理,最好的办法是采用枚举,即假设酋长等级为5,等级限制为2,那么需要枚举等级从3~5,4~6,5~7 //然后就是dij了,至于为什么要用dij,看个人喜好,毕竟这里等级处理要对vis数组进行标记 //处理了等级问题,就可以枚举等级数组,n倍dij跑完本题了,nlogn0ms搞定 //以下为具体代码 #include<cstdio> #include<cstr

I good vegetable a! 996

poj 1797 最短路变形dijkstra

题意:题目大意:有n个城市,m条道路,在每条道路上有一个承载量,现在要求从1到n城市最大承载量,而最大承载量就是从城市1到城市n所有通路上的最大承载量 链接:点我 解题思路:其实这个求最大边可以近似于求最短路,只要修改下找最短路更新的条件就可以了 1 #include<cstdio> 2 #include<iostream> 3 #include<...

weixin_30886233的博客 192

poj 1258 Agri-Net dijkstra迪杰斯特拉算法,最短路径问题的变形,最小生成树

用最少的路线,把所有的农场连接起来。 涉及到最小生成树,但我的代码只用了他的思想 思路:从第一个点开始走,用一个数组vis[N]来记录农场是否已连接。 map[N][N]矩阵存储关系。 主要的是在已访问的点与未访问的点之间

雪的期许 851

迪杰斯特拉算法python实现

回顾下最短路径的地杰斯特拉算法迪杰斯特拉算法是求从某一个起点到其余所有结点的最短路径,是一对多的映射关系,是一种贪婪算法示例: 算法实现流程思路: 迪杰斯特拉算法每次只找离起点最近的一个结点,并将之并入已经访问过结点的集合(以防重复访问,陷入死循环),然后将刚找到的最短路径的结点作为中间结点来更新相邻结点的路径长度,这样循环找到图中一个个结点的最短路径。# dists定义了图,记录着从从起点出发

silence2015的专栏 1万+

poj 1125_迪杰斯特拉

题目描述:   在无向图中进行留言散播。不定起点,边权为一次散播时间。求散播留言到全网的最小时间。 解题思路: 做v次迪杰斯特拉。每一次求从v点出发消息扩散的全网的最短时间Des[v]。在一次迪杰斯特拉中,求从v点出发到其余各点的最短时间,存到数组D[]中。计算完V到其余各点的消息扩散最短时间后,选择这个v点的D[]的最大值——即扩散到最远节点花费的时间,存为Des[v]。最后再Des[v]中选

河洛 526

POJ Dijkstra入门

POJ2253 题: 题:

Since_natural_ran 1008

Dijkstra算法的Python实现

太白发句,谓之开门见山。 代码一一如下。 # This is a program to illustrate the detail of dijkstra algorithm. # 这里为了引入无穷大这个概念 import sys size = 6 adjMatrix = [[0, 50, sys.maxsize, 40, 25, 10], [50, 0, 15, 20, sys.max...

Wayne_Mai的博客 2316

POJ2387 迪杰斯特拉:

#include &lt;iostream&gt; #include &lt;cstdio&gt; #include &lt;cstring&gt; #include &lt;vector&gt; #include &lt;queue&gt; #include &lt;cmath&gt; #define mem(a,b) memset(a,b,sizeof(a)) using namespace ...

qq_42569807的博客 234
上一篇: 数据结构C++实验之稀疏矩阵乘法
下一篇: HDU4920 Matrix multiply (三元组稀疏矩阵)
Link_Ray
博客等级 码龄9年 44粉丝 156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值