昂贵的聘礼 Dijkstra法
poj 1062
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 39437 | Accepted: 11432 |
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
对于从u点出发到w点的路径中,他会跟很多等级的人交易,然而必须满足在路径中的点等级差不很超过一个M值,那么怎么对这样的问题求解呢?我没看报告前是很疑惑的!
假设如果给这条路径加上一个附加条件的话,情况可能就有所变化了,要求最短路中的所有点的等级在一个区间内[a,b],如果能够很好的给出这个区间的话,只要对图中的点进行上筛选即可了。
这个区间的确定显然不是随便的,那么就要根据一定的条件了,从题意中我们知道,最后所有的最短路都会汇集在1号点,也就是说1号点是所有最短路都存在的点,好了,这个条件很重要,这样我们就可以依照1号点来给定区间了,比如1号点等级为lev,那么也就是说在所有最短路的这些点都必须满足在[lev-M,lev+M]这个区间里面。好了,可能你会迫不及待将这个区间作为最后的区间,在想想,如果在这个区间内出现的两个点的他们之间的等级差超过了M值(这是存在的),显然,不符合题意了,所以这个区间还有继续缩小。其实只要稍微动动脑子,就可以找出这样的区间[lev-M,lev],[lev-M+1,lev+1],... ...,[lev,lev+M],首先这些区间都满足大区间的条件,而且如果将这些区间的某个作为筛选条件的话,在这个区间内的任意两个点的等级都不会超过M值,这就是很特别的地方了(转)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
const int INF=;
int maps[][],v[],d[],N;
int l[],p[],in[]; int Dijkstra()
{
memset(v,,sizeof(v));
int i,j,k,mini; for(i=;i<=N;i++)
d[i]=INF;
d[]=;
for(i=;i<=N;i++)
{
mini=INF;k=-;
for(j=;j<=N;j++)
{
if(!v[j] && in[j] && d[j]<mini)
mini=d[k=j];
}
if(mini==INF)
break; v[k]=;
for(j=;j<=N;j++)
{
if(!v[j] && in[j] && d[k]+maps[k][j]<d[j])
{
d[j]=d[k]+maps[k][j];
}
}
}
mini=INF;
for(i=;i<=N;i++)
{
if(d[i]+p[i]<mini && v[i])
mini=d[i]+p[i];
}
return mini;
} int main()
{
int m,x,T,V;
int i,j,minicost;
while(scanf("%d %d",&m,&N)!=EOF)
{ for(i=;i<=N;i++)
{
for(j=;j<=N;j++)
{
maps[i][j]=( i==j ? :INF);
}
}
for(i=;i<=N;i++)
{
scanf("%d %d %d",&p[i],&l[i],&x);
for(j=;j<=x;j++)
{
scanf("%d %d",&T,&V);
if(maps[i][T]>V)
{
maps[i][T]=V;
}
}
}
int lev=l[],coc;
minicost=INF;
for(i=;i<=m;i++)
{
memset(in,,sizeof(in));
for(j=;j<=N;j++)
{
if(l[]-m+i<=l[j] && l[j]<=l[]+i)
in[j]=;
}
coc=Dijkstra();
if(coc<minicost)
minicost=coc;
}
printf("%d\n",minicost);
}
return ;
}
昂贵的聘礼 Dijkstra法的更多相关文章
- 昂贵的聘礼(dijkstra)
昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 38549 Accepted: 11158 Descripti ...
- 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 ...
随机推荐
- word - 如何让 图片任意移动
选中图片, 设置图片的自动换行 为四周环绕型
- 要心中有“数”——C语言初学者代码中的常见错误与瑕疵(8)
在 C语言初学者代码中的常见错误与瑕疵(7) 中,我给出的重构代码中存在BUG.这个BUG是在飞鸟_Asuka网友指出“是不是时间复杂度比较大”,并说他“第一眼看到我就想把它当成一个数学问题来做”之后 ...
- Sublime Text 3 常用插件以及安装方法
安装Sublime Text 3插件的方法: 一.直接安装 安装Sublime text 2插件很方便,可以直接下载安装包解压缩到Packages目录(菜单->preferences->p ...
- IntelliJ IDEA---java的编译工具【转】
转自:http://baike.baidu.com/link?url=sEpS0rItaB9BiO3i-qCdGSYiTIVPSJfBTjSXXngtN2hBhGl1j36CYQORKrbpqMHqj ...
- crontab 日志备份定时任务
-l选项,查看当前用户的所有定时任务: [xiluhua@vm-xiluhua][/home]$ crontab -l * * * * * /home/xiluhua/shell_script/log ...
- 日常css和js小知识点记录
2015-6-29 1.<meta name="viewport" content="width=device-width,user-scalable=no&quo ...
- JavaEE基础(二十三)/递归
1.File类递归练习(统计该文件夹大小) 需求:1,从键盘接收一个文件夹路径,统计该文件夹大小 2.File类递归练习(删除该文件夹) 需求:2,从键盘接收一个文件夹路径,删除该文件夹 3.File ...
- SQL编程之高级查询(子查询)以及注意事项
SQL编程之高级查询(子查询)以及注意事项 1.什么是子查询? 当一个查询是另一个查询的条件时,称之为子查询.子查询可以使用几个简单命令构造功能强大的复合命令.子查询最常用于SELECT-SQL命 ...
- 第一课: iOS入门
xcode几个项目模板的说明: http://blog.csdn.net/chang6520/article/details/7926444 1. single view app: xcode中的st ...
- cocos2dx lua bug之module 'lsqlite3' not found
05-27 15:41:01.360: D/cocos2d-x debug info(7261): [LUA-print] -------------------------------------- ...