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 年轻的探险家来到了一个印第安部落里.在那里 ...
随机推荐
- uptime 负载 top
1.首先怎样知道我的CPU是几核呢? 使用以下命令可以直接获得CPU核心数目 grep 'model name' /proc/cpuinfo | wc -l 2.单核CPU - 单车道 - 数字在0. ...
- iOS11 Xcode 9 按住command 单击 恢复到从前(直接跳转到定义)
iOS11 Xcode 9 按住command 单击 恢复到从前(直接跳转到定义) 2017年9月20日,苹果如期推送 Xcode 9 和 iOS 11的更新. Xcode 9正式版与之前bet ...
- php操作文件类的函数
<?php /** // 一行一行读取一个文件 (文件内容很大的时候,适用.file_get_contents此场景就不太好) $re = fopen("index.php" ...
- 1.6《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——小结
本章节学过的重要命令整理,见下表Table 2. 命令 描述 例子 echo <string> 向屏幕输出字符串 $ echo hello man <command> 显示命令 ...
- 20155227《网络对抗》Exp9 Web安全基础实践
20155227<网络对抗>Exp9 Web安全基础实践 实验内容 关于WebGoat Cross-Site Scripting(XSS)练习 Injection Flaws练习 CSRF ...
- 20155238 2016-2017-2 《JAVA程序设计》第九周学习总结
教材学习内容总结 第十六章 JDBC SQL的解决方案是JDBC,在Java中,JDBC API主要用来存取数据库. *JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关 ...
- PostgreSQL安装和配置---Ubuntu
PostgreSQL安装和配置---Ubuntu
- R实战 第六篇:数据变换(aggregate+dplyr)
数据分析的工作,80%的时间耗费在处理数据上,而数据处理的主要过程可以分为:分离-操作-结合(Split-Apply-Combine),也就是说,首先,把数据根据特定的字段分组,每个分组都是独立的:然 ...
- 【ORACLE】oracle11g单实例安装
-- 上传安装包 p13390677_112040_Linux-x86-64_1of7.zip p13390677_112040_Linux-x86-64_2of7.zip -- 解压安装包 unzi ...
- pandas 初识(一)
基本内容 Series: Series 是有一组数据(numpy的数据类型 numpy.ndarray)以及一组数据标签(即索引)组成,可以看成一个一个定长的有序字典(索引值到数据值的一个映射) ob ...