POJ 1062 昂贵的聘礼(最短路中等题)
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 51879 | Accepted: 15584 |
Description
为了方便起见,我们把所有的物品从1开始进行编号,酋长的允诺也看作一个物品,并且编号总是1。每个物品都有对应的价格P,主人的地位等级L,以及一系列的替代品Ti和该替代品所对应的"优惠"Vi。如果两人地位等级差距超过了M,就不能"间接交易"。你必须根据这些数据来计算出探险家最少需要多少金币才能娶到酋长的女儿。
Input
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<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define INF 0x3f3f3f3f
#define M 200
int price[M],rank[M],n,g[M][M],cnt,dist[M],vis[M],u,m,id,num;
void init(){
memset(price,,sizeof(price));memset(rank,,sizeof(rank));
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
g[i][j] = INF;
}
void dij(){
for(int i=;i<=n;i++)
dist[i] = price[i];
int n1 = n;
while(n1--){
int minn = INF;
for(int i=;i<=n;i++)
if(dist[i]<minn&&!vis[i])
dist[u=i];
vis[u] = ;
for(int i=;i<=n;i++){
if(!vis[i]&&dist[i]>dist[u]+g[u][i])
dist[i] = dist[u] + g[u][i];
}
}
}
int main(){
while(scanf("%d%d",&cnt,&n)!=EOF){
init();
for(int i=;i<=n;i++){
scanf("%d%d%d",&price[i],&rank[i],&m);
for(int j=;j<=m;j++){
scanf("%d%d",&id,&num);
g[id][i] = num;
}
}
int ans = INF;
for(int i=;i<=n;i++){
int max_rank = rank[i];
for(int j=;j<=n;j++){
if(rank[j]<max_rank||rank[j]-max_rank>cnt)
vis[j] = ;
else vis[j]=;
}
dij();
ans = min(ans,dist[]);
}
cout<<ans<<endl;
}
return ;
}
POJ 1062 昂贵的聘礼(最短路中等题)的更多相关文章
- POJ - 1062 昂贵的聘礼(最短路Dijkstra)
昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000KB 64bit IO Format: %I64d & %I64u SubmitStatus Descr ...
- POJ 1062 昂贵的聘礼 最短路 难度:0
http://poj.org/problem?id=1062 #include <iostream> #include <cstring> #include <queue ...
- POJ 1062 昂贵的聘礼 最短路+超级源点
Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女儿嫁给他.探险家拿不出这么多金币,便请求酋长降低 ...
- poj 1062 昂贵的聘礼 最短路 dijkstra
#include <cstdio> #include <cmath> #include <cstring> #include <ctime> #incl ...
- 最短路(Dijkstra) POJ 1062 昂贵的聘礼
题目传送门 /* 最短路:Dijkstra算法,首先依照等级差距枚举“删除”某些点,即used,然后分别从该点出发生成最短路 更新每个点的最短路的最小值 注意:国王的等级不一定是最高的:) */ #i ...
- POJ 1062 昂贵的聘礼(图论,最短路径)
POJ 1062 昂贵的聘礼(图论,最短路径) Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女 ...
- poj 1062 昂贵的聘礼 (dijkstra最短路)
题目链接:http://poj.org/problem?id=1062 昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000K Total Submission ...
- 最短路POJ 1062 昂贵的聘礼
C - 昂贵的聘礼 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit St ...
- POJ 1062 昂贵的聘礼 (最短路)
昂贵的聘礼 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/M Description 年轻的探险家来到了一个印第安部落里.在那里 ...
随机推荐
- php实现远程网络文件下载到服务器指定目录(方法一)
PHP实现远程网络文件下载到服务器指定目录(方法一) <?php function getFile($url, $save_dir = '', $filename = '', $type = 0 ...
- 第13章 GPIO—位带操作
第13章 GPIO—位带操作 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fire ...
- STM32 CAN总线标识符过滤器难点解析
STM32 CAN总线标识符过滤器难点解析 原创 2016年05月31日 15:12:24 标签: stm32 / CAN 4910 CAN总线是目前应用非常多的一种总线,在汽车电子,航空航天中应用广 ...
- 配置Docker镜像加速器
由于在国内下载docker官方镜像的速度很慢且容易报错,因此需要配置docker镜像加速器来解决这个问题,加速器就是镜像代理的概念,只代理公有镜像,报错结果如下: net/http: request ...
- redis系列--redis4.0深入持久化
前言 在之前的博文中已经详细的介绍了redis4.0基础部分,并且在memcache和redis对比中提及redis提供可靠的数据持久化方案,而memcache没有数据持久化方案,本篇博文将详细介绍r ...
- linux下的yum命令详细介绍
yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RP ...
- 浅谈iOS 自动调节文本高度
文字展示是任何GUI开发的一个最常规的编程任务.可能一提及文字我们脑中想到的无非就是 Label 和 Text 这两个关键词,今天我们就谈谈 Label. 无论在 Windows 或者 Web 开发中 ...
- Mvc4_@Styles.Render提高性能
在页面上可以用@Styles.Render("~/Content/css") 来加载css 首先要在App_Start 里面BundleConfig.cs 文件里面 添加要包含的c ...
- 在Ubuntu虚拟机上安装DVWA
学习资料来源:https://www.neddos.tech/?p=107 最后更新时间: 190122·17:41 1> 什么是DVWA(Damn Vulnerable Web Applica ...
- hadoop balance工具平衡集群dfs存储及遇到异常Got error, status message Not able to receive block 1073959989 from /192.168.1.37:3004 because threads quota is exceeded
hadoop集群某个节点dfs存储比其他节点存储高时,一般会使用hadoop提供的balance(start-balancer.sh -threshold 10 )工具来移动高存储节点上的块到低存储节 ...