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

思路:从冒险家出发建图,出发节点标为0 。 每一个物品与它的替代品构成有向边,即替代品指向该物品,终于找出到1这个物品的最短路。

本题比較困难的地方就是它限制了等级。也是研究了网上的代码才有了思路。枚举每一个物品的主人的等级并设为最大的等级 设为maxlv,最小等级则为minlv=maxlv-m,那么其余的物品的主人的等级必须要大于maxlv。仅仅计算这些合法的物品就能够了,每次枚举都更新终于结果。

#include<stdio.h>
#include<string.h>
const int INF=10000000;
int n,m,d[105],w[105][105],v[105],lv[105],use[105];
int Min(int a,int b)
{
return a<b? a:b;
}
int dijkstra() //最短路算法
{
memset(v,0,sizeof(v));
for(int i=1;i<=n;i++) d[i]=INF;d[0]=0;
for(int i=0;i<=n;i++) {
int x,m=INF;
for(int y=0;y<=n;y++) if(!use[y] && !v[y] && d[y]<=m) m=d[x=y]; //use[]记录是否为等级合法的物品。
v[x]=1;
if(x==1) break;
for(int y=0;y<=n;y++) if(!use[y])
d[y]=Min(d[y] , d[x]+w[x][y]);
}
return d[1];
}
int main()
{
while(~scanf("%d%d",&m,&n)) {
int t,tmp1,tmp2,i,j,ans=INF;
for(i=0;i<=n;i++)
for(j=0;j<=n;j++)
w[i][j]=INF;
for(i=1;i<=n;i++) {
scanf("%d%d%d",&w[0][i],&lv[i],&t);
for(j=1;j<=t;j++) {
scanf("%d%d",&tmp1,&tmp2);
w[tmp1][i]=tmp2;
}
}
for(i=1;i<=n;i++) { //枚举每一个物品,并求一次在该物品的主人等级最高的前提下的最短路。 这是本题比較困难的地方
int maxlv=lv[i],minlv=lv[i]-m,tmp;
memset(use,0,sizeof(use));
for(j=1;j<=n;j++) {
if(lv[j]>maxlv || lv[j]<minlv) use[j]=1;
}
tmp=dijkstra();
if(tmp<ans) ans=tmp;
}
printf("%d\n",ans);
}
return 0;
}

POJ 1066 昂贵的聘礼的更多相关文章

  1. 最短路(Dijkstra) POJ 1062 昂贵的聘礼

    题目传送门 /* 最短路:Dijkstra算法,首先依照等级差距枚举“删除”某些点,即used,然后分别从该点出发生成最短路 更新每个点的最短路的最小值 注意:国王的等级不一定是最高的:) */ #i ...

  2. POJ 1062 昂贵的聘礼(图论,最短路径)

    POJ 1062 昂贵的聘礼(图论,最短路径) Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女 ...

  3. POJ 1062 昂贵的聘礼

    C - 昂贵的聘礼 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit St ...

  4. poj 1062 昂贵的聘礼 (dijkstra最短路)

    题目链接:http://poj.org/problem?id=1062 昂贵的聘礼 Time Limit: 1000MS   Memory Limit: 10000K Total Submission ...

  5. 最短路POJ 1062 昂贵的聘礼

    C - 昂贵的聘礼 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit St ...

  6. POJ 1062 昂贵的聘礼(带限制条件的dijkstra)

    题目网址:http://poj.org/problem?id=1062 题目: 昂贵的聘礼 Time Limit: 1000MS   Memory Limit: 10000K Total Submis ...

  7. POJ 1062 昂贵的聘礼 (最短路)

    昂贵的聘礼 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/M Description 年轻的探险家来到了一个印第安部落里.在那里 ...

  8. POJ 1062 昂贵的聘礼(最短路中等题)

    昂贵的聘礼 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 51879   Accepted: 15584 Descripti ...

  9. POJ -1062 昂贵的聘礼(前向星 &amp;&amp; SPFA)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u013497151/article/details/30299671 题目链接:id=1062&qu ...

随机推荐

  1. SQL server Profiler 监视数据库活动

    做网站后台开始时需要考虑后台对数据库的一些操作,比如尽量减少查询次数,尽快释放连接,只选取必须的字段等等.如果是用三层开发,复杂的项目中直接拼装SQL语句多一点,拼装的SQL语句可以直接在SQL se ...

  2. C# 全文搜索Lucene

    全文出自:https://blog.csdn.net/huangwenhua5000/article/details/9341751 1 lucene简介1.1 什么是luceneLucene是一个全 ...

  3. [PHP] 看博客学习插入排序

    定义数组长度变量$len,使用count()函数,参数:数组 for循环数组,条件:从第二个开始,遍历数组,循环内 定义临时变量$temp,赋值当前元素 for循环数组,条件:遍历当前元素前面的所有元 ...

  4. Java基础——Servlet(四)

    最近一直在学习Servlet,真的有烦躁,一下子要创建好几个文件,服务端.客户端.html页面....学习进度蛮慢的,很容易失掉信心.当学习到cookie时,发现有好多实现是在我们日常生活中可以会遇得 ...

  5. 【Mysql】mysql和mariadb的区别

    MySQL之父Widenius先生离开了Sun之后,觉得依靠Sun/Oracle来发展MySQL,实在很不靠谱,于是决定另开分支,这个分支的名字叫做MariaDB.MariaDB跟MySQL在绝大多数 ...

  6. VMware设置桥接上网

    转自:http://blog.csdn.net/gavin_dinggengjia/article/details/6325904 环境:主机Win7.VMware Workstation 6.5.3 ...

  7. 快速导出云服务器mysql的表数据

    1.许多互联网应用的数据库都布署在远程的Linux云服务器上,我们经常要编辑表数据,导出表数据. 通常的做法是ssh连接到服务器,然后命令登录,命令查询导出数据,费时费力,效率低下. 安装TreeSo ...

  8. JSP学习笔记(6)-使用数据库

    1.连接MySQL数据库 1.1.JDBC JDBC(Java Database Connectivity)提供了访问数据库的API,由一些Java类和接口组成,是Java运行平台核心库中的一部分.用 ...

  9. ORM--Entity Framework 学习(01)

    关键词:Entity Framework:微软官方提供的ORM工具,ORM让开发人员节省数据库访问的代码时间,将更多的时间放到业务逻辑层代码上.EF提供变更跟踪.唯一性约束.惰性加载.查询事物等.开发 ...

  10. HDU1698(KB7-E 线段树)

    Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...