昂贵的聘礼(Dijkstra)
http://poj.org/problem?id=1062
每个物品看成一个节点,酋长的允诺也看作一个物品, 如果一个物品加上金币可以交换另一个物品,
则这两个节点之间有边,权值为金币数,求第一个节点到所有节点的最短路。
因为有等级限制,所以枚举每个点作为最低等级,选取符合所有符合等级限制的点。注意:酋长的等级不一定是最高的。
#include<stdio.h>
#include<string.h>
const int INF=<<;
const int Max=;
int vis[Max],dis[Max],rank[Max];
int price[Max][Max];
int x[Max],N,M;
int Dijkstra()
{
int pos;
for (int i = ; i <= N; i ++)
{
dis[i] = price[][i];//初始化每个物品本身的价格
}
for (int i = ; i <= N; i ++)
{
pos = ;
int min = INF;
for (int j = ; j <= N; j ++)
{
if (!vis[j] && dis[j] < min)
{
min = dis[j];
pos = j;
}
}
if (pos == )
break;
vis[pos] = ;
for (int j = ; j <= N; j ++)
{
if (!vis[j] && price[pos][j] > && dis[j] > min + price[pos][j])
{
dis[j] = price[pos][j]+min;
}
}
}
return dis[];
}
void init()
{
memset(vis,,sizeof(vis));
memset(price,,sizeof(price));
memset(rank,,sizeof(rank));
memset(dis,,sizeof(dis)); }
int main()
{
scanf("%d%d",&M,&N);
init();
int minprice = INF;
for (int i = ; i <= N; i ++)
{
scanf("%d%d%d",&price[][i],&rank[i],&x[i]);
for (int j = ; j <= x[i]; j ++)
{
int num,p;
scanf("%d%d",&num,&p);
price[num][i] = p;//表示能代替i号物品的num号替代品的价格
}
}
for (int i = ; i <= N; i ++)
{
int max=rank[i];
for (int j = ; j <= N; j ++)
{
if (rank[j] > max ||max - rank[j] > M)//去除不符合等级限制的点
vis[j] = ;
else
vis[j] = ;
}
int ans = Dijkstra();
if (ans < minprice)
minprice = ans;
}
printf("%d\n",minprice);
return ;
}
昂贵的聘礼(Dijkstra)的更多相关文章
- 昂贵的聘礼(dijkstra)
昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 38549 Accepted: 11158 Descripti ...
- 昂贵的聘礼 Dijkstra法
poj 1062 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 39437 Accepted: 11432 Descri ...
- POJ - 1062 昂贵的聘礼 Dijkstra
思路:构造最短路模型,抽象出来一个源点,这个源点到第i个点的费用就是price[i],然后就能抽象出图来,终点是1. 任意两个人之间都有等级限制,就枚举所有最低等级限制,然后将不再区间[min_lev ...
- POJ-1062 昂贵的聘礼---Dijkstra+枚举上界
题目链接: https://vjudge.net/problem/POJ-1062 题目大意: 中文题 思路: 1是终点,可以额外添加一个源点0,0到任意一节点的距离就是这个点的money,最终求的是 ...
- 最短路(Dijkstra) POJ 1062 昂贵的聘礼
题目传送门 /* 最短路:Dijkstra算法,首先依照等级差距枚举“删除”某些点,即used,然后分别从该点出发生成最短路 更新每个点的最短路的最小值 注意:国王的等级不一定是最高的:) */ #i ...
- POJ1062昂贵的聘礼(dijkstra)
昂贵的聘礼 题目大意是说有N个物品,每个物品都有自己的价格,但同时某些物品也可以由其他的(可能不止一个)替代品,这些替代品的价格比较“优惠”,问怎么样选取可以让你的花费最少来购买到物品1 由于有N个物 ...
- POJ1062昂贵的聘礼(经典) 枚举区间 +【Dijkstra】
<题目链接> 昂贵的聘礼 Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用1000 ...
- (最短路 dijkstra)昂贵的聘礼 -- poj -- 1062
链接: http://poj.org/problem?id=1062 昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000K Total Submissions ...
- poj 1062 昂贵的聘礼 (dijkstra最短路)
题目链接:http://poj.org/problem?id=1062 昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000K Total Submission ...
- POJ - 1062 昂贵的聘礼(最短路Dijkstra)
昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000KB 64bit IO Format: %I64d & %I64u SubmitStatus Descr ...
随机推荐
- Zabbix 客户端安装教程(第二篇)
Zabbix 客户端安装教程 blog地址:http://www.cnblogs.com/caoguo [root@localhost ~]# yum install -y gcc make [roo ...
- PHP 之simple_html_dom实现网页数据采集
<?php set_time_limit(0); include './simple_html_dom.php'; $url = 'https://price.pcauto.com.cn/pri ...
- 【原】Python学习_Django搭建环境及创建第一个项目
1.Window 平台安装 Python 下载安装包 https://www.python.org/downloads/windows/ 2.Pyhton环境变量配置 右键点击"计算机 ...
- BZOJ 1941: [Sdoi2010]Hide and Seek KDtree + 估价函数
Code: #include<bits/stdc++.h> #define maxn 200000 #define inf 1000000000 using namespace std; ...
- servlet之@PostConstruct,@PreDestroy
1.@PostConstruct说明 被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,类似于Serclet的inti()方法.被@PostCo ...
- 模板中tempname与class区别
前言 在分析traits编程之前, 我们需要对模板参数类型tempname和class有一定的了解, 要明白他们在哪些方面不同, 哪些方面相同, 这样才能对体会到traits编程的核心. 如果你已经明 ...
- (C/C++学习)5.C++中的虚继承-虚函数-多态解析
说明:在C++学习的过程中,虚继承-虚函数经常是初学者容易产生误解的两个概念,它们与C++中多态形成的关系,也是很多初学者经常产生困惑的地方,这篇文章将依次分别对三者进行解析,并讲述其之间的联系与不同 ...
- Mac在python3环境下安装virtualwrapper遇到的问题
前言 我在使用mac安装virtualwrapper的时候遇到了问题,搞了好长时间,才弄好,在这里总结一下分享出来,供遇到相同的问题的朋友使用,少走些弯路. 问题说明: Mac默认系统的python2 ...
- Huawei-R&S-网络工程师实验笔记20190608-VLAN划分基础(基于端口、MAC地址、子网地址、协议)
>Huawei-R&S-网络工程师实验笔记20190608-VLAN划分基础(基于端口.MAC地址.子网地址.协议) >>实验开始,先上拓扑图参考: 一.基于端口划分VLAN ...
- KD树学习小结
几个月后的UPD: 学习完下面之后,实战中的总结: 0.比赛中正解就是kdtree的题目很少很少 1.几类优先考虑kdtree的题目: k(维度) >= 3 的题目 二维平面上涉及区间标记的题目 ...