POJ-1062-昂贵的聘礼 (最短路)
昂贵的聘礼
Description
年轻的探险家来到了一个印第安部落里。在那里他和酋长的女儿相爱了,于是便向酋长去求亲。酋长要他用10000个金币作为聘礼才答应把女儿嫁给他。探险家拿不出这么多金币,便请求酋长降低要求。酋长说:"嗯,如果你能够替我弄到大祭司的皮袄,我可以只要8000金币。如果你能够弄来他的水晶球,那么只要5000金币就行了。"探险家就跑到大祭司那里,向他要求皮袄或水晶球,大祭司要他用金币来换,或者替他弄来其他的东西,他可以降低价格。探险家于是又跑到其他地方,其他人也提出了类似的要求,或者直接用金币换,或者找到其他东西就可以降低价格。不过探险家没必要用多样东西去换一样东西,因为不会得到更低的价格。探险家现在很需要你的帮忙,让他用最少的金币娶到自己的心上人。另外他要告诉你的是,在这个部落里,等级观念十分森严。地位差距超过一定限制的两个人之间不会进行任何形式的直接接触,包括交易。他是一个外来人,所以可以不受这些限制。但是如果他和某个地位较低的人进行了交易,地位较高的的人不会再和他交易,他们认为这样等于是间接接触,反过来也一样。因此你需要在考虑所有的情况以后给他提供一个最好的方案。
为了方便起见,我们把所有的物品从1开始进行编号,酋长的允诺也看作一个物品,并且编号总是1。每个物品都有对应的价格P,主人的地位等级L,以及一系列的替代品Ti和该替代品所对应的"优惠"Vi。如果两人地位等级差距超过了M,就不能"间接交易"。你必须根据这些数据来计算出探险家最少需要多少金币才能娶到酋长的女儿。
Input
输入第一行是两个整数M,N(1 <= N <= 100),依次表示地位等级差距限制和物品的总数。接下来按照编号从小到大依次给出了N个物品的描述。每个物品的描述开头是三个非负整数P、L、X(X < N),依次表示该物品的价格、主人的地位等级和替代品总数。接下来X行每行包括两个整数T和V,分别表示替代品的编号和"优惠价格"。
Output
输出最少需要的金币数。
Sample Input
1 4
10000 3 2
2 8000
3 5000
1000 2 1
4 200
3000 2 1
4 200
50 2 0
Sample Output
5250
解题思路
每个物品看成一个节点,酋长的允诺也看作一个物品, 如果一个物品加上金币可以交换另一个物品,则这两个节点之间有边,权值为金币数,求第一个节点到所有节点的最短路。因为有等级限制,所以枚举每个点作为最低等级,选取符合所有符合等级限制的点
程序代码
#include<stdio.h>
#include<string.h>
void dijstra(int st,int et);
#define inf 99999999
int m,n;
int p[110],l[110],x,t,v;
int e[110][110],book[110],dis[110];
int main()
{int i,j,min;while(scanf("%d%d",&m,&n)!=EOF){for(i=1;i<=n;i++)for(j=1;j<=n;j++)if(i==j)e[i][j]=0;elsee[i][j]=inf;for(i=1;i<=n;i++){scanf("%d%d%d",&p[i],&l[i],&x);for(j=1;j<=x;j++){scanf("%d%d",&t,&v);e[i][t]=v;}}min=inf;for(i=l[1]-m;i<=l[1];i++){memset(book,0,sizeof(book));dijstra(i,i+m);for(j=1;j<=n;j++)if(min>dis[j]+p[j])min=dis[j]+p[j];}printf("%d\n",min);}return 0;
}
void dijstra(int st,int et)
{int i,j,k,u,min;for(i=2;i<=n;i++){dis[i]=e[1][i];if(l[i]<st||l[i]>et){book[i]=1;dis[i]=inf;}}dis[1]=0;book[1]=1;for(k=1;k<=n-1;k++){min=inf;for(i=1;i<=n;i++)if(book[i]==0&&dis[i]<min){min=dis[i];u=i;}if(min==inf)break;//如果没有可以去的点了就直接跳出 book[u]=1;for(i=1;i<=n;i++)if(book[i]==0&&dis[i]>dis[u]+e[u][i])dis[i]=dis[u]+e[u][i];}
}
POJ-1062-昂贵的聘礼 (最短路)相关推荐
- 解题报告:POJ - 1062 昂贵的聘礼(最短路、超级源点)
整理的算法模板合集: ACM模板 AcWing 903. 昂贵的聘礼 [思路] 由于本题只有终点,没有起点,所以我们建一个超级源点S=0S = 0S=0 ,源点与各各点的权值就是他们的价格 如下图所示 ...
- POJ 1062 昂贵的聘礼【经典的最短路问题】
原题链接:http://poj.org/problem?id=1062 我的链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=19651 ...
- POJ 1062 昂贵的聘礼
昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 30252 Accepted: 8465 Descriptio ...
- POJ 1062 昂贵的聘礼 (dijkstra)
昂贵的聘礼 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女儿嫁给他.探险家拿不出这么多金币,便请求酋长降低要求.酋长说 ...
- POJ #1062 昂贵的聘礼 有限制的最短路 枚举+dijkstra求最短路
Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女儿嫁给他.探险家拿不出这么多金币,便请求酋长降低 ...
- POJ 1062.昂贵的聘礼
Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女儿嫁给他.探险家拿不出这么多金币,便请求酋长降低 ...
- POJ - 1062 昂贵的聘礼
题目链接 Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女儿嫁给他.探险家拿不出这么多金币,便请 ...
- POJ 1062 昂贵的聘礼
一.内容 某天超市搞活动,小明想买一个自己一直想买的电脑,平时需要7000,小明觉得太贵了.但活动当天,超市里的商品可以通过买其他商品获得优惠券.例如买一个键盘然后买电脑只需要5000,如果买一个鼠标 ...
- POJ - 昂贵的聘礼(最短路)
题目链接:http://poj.org/problem?id=1062 Time Limit: 1000MS Memory Limit: 10000K Description 年轻的探险家来到了一个印 ...
- * poj 1062 昂贵的礼物 dijkstra 枚举区间
思路参考大佬 https://blog.csdn.net/lyy289065406/article/details/6645852 每个物品看成一个节点,酋长的允诺也看作一个物品, 如果一个物品加上金 ...
最新文章
- data pump工具
- Python 自动化运维 pycurl
- 【AJAX】反向Ajax第1部分:Comet介绍
- 查看动态链接库依赖关系的命令
- k86跟mysql_MySQL【基础架构】
- SSL服务器配置评级指南
- 普罗米修斯使用es数据库_用普罗米修斯和格拉法纳仪法来豪猪
- mysql像plsql一样删除提交_MySQL学习-MySQL内置功能_事务操作
- 苹果公布iPhone 12屏幕更换价格,果然没让人失望!
- 【UWP】批量修改图标尺寸
- PHP laravel框架Redis门面的误用
- 全向轮机器人逆时针自旋运动分析
- Clean Code 笔记
- lombok链式调用_翻车!记一次使用 Lombok 造成的事故!
- LPTSTR CString 相互转换
- ui设计师职业规划怎么写_UI设计师职业规划
- CKeditor配置
- ⚓写写5G网速及页面提速中的延迟加载Lazyloading
- !和!!的区别和用法
- 美国队长的工资 python代码-Python入门必学,用Python练习画个美队盾牌