昂贵的聘礼
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 41066   Accepted: 11959

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

Source

//这道是中文题,我居然还理解错了题意.本题的等级差是指  : 最高等级与最低等级的差值,并非每两个人之间的差值.

#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <string.h>
#include <queue>
#include <vector>
#define ll long long
#define inf 0x3f3f3f3f using namespace std;
int n,m;
struct node{
int p;
int l;
int x;
}a[110];
struct Nd{
int num;
int money;
}now;
int s,e;
vector<Nd>vec[110];
int vis[110];
int dis[110];
int ans;
void spfa(){
memset(vis,0,sizeof(vis));
memset(dis,inf,sizeof(dis));
queue<int>q;
q.push(1);
vis[1] = 1;
dis[1] = a[1].p;
while(!q.empty()){
int u = q.front();
q.pop();
vis[u] = 0;
for(int i = 0; i < vec[u].size(); ++i){
now = vec[u][i];
if(dis[now.num] > dis[u]-a[u].p+a[now.num].p+now.money&&a[now.num].l>=s && a[now.num].l<=e){
dis[now.num] = dis[u]-a[u].p+a[now.num].p+now.money;
if(!vis[now.num]){
vis[now.num] = 1;
q.push(now.num);
}
}
}
}
for(int i = 1; i <= n; ++i){
ans = min(ans,dis[i]);
}
}
int main()
{
while(~scanf("%d%d",&m,&n)){
for(int i = 0; i <= n; ++i){
vec[i].clear();
} for(int i = 1; i <= n; ++i){
scanf("%d%d%d",&a[i].p,&a[i].l,&a[i].x);
for(int j = 0; j < a[i].x; ++j){
scanf("%d%d",&now.num,&now.money);
vec[i].push_back(now);
}
} ans = inf;
for(int i = a[1].l-m; i <= a[1].l; ++i){
s = i;
e = i+m;
spfa();
}
printf("%d\n",ans);
}
return 0;
}

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#define INF 200000000 using namespace std; struct node
{
int u,v,w;
} edge[10000];
int num=0;
int N,M;
int P[2000],L[2000],n[2000];
int t,v;
int low[2000],a,b;
int has[2000] ;
int Bellman(int u0)
{
for(int i=0; i<=N; i++)
low[i]=INF; low[u0]=0;
for(int i=0; i<N-1; i++)
{
int flag=0;
for(int j=0; j<num; j++)
{
if(has[edge[j].u]&&has[edge[j].v]&&low[edge[j].u]+edge[j].w<low[edge[j].v])
{
low[edge[j].v]=low[edge[j].u]+edge[j].w;
flag=1;
}
}
if(flag==0)
break;
} int Min=INF;
for(int i=1; i<=N; i++)
{
low[i]+=P[i]; //最小价格为优惠价+拥有优惠价须要花多少钱
if(Min>low[i])
Min=low[i];
}
//printf("%d\n",Min);
return Min;
}
int main()
{
//freopen("in.txt","r",stdin);
while(~scanf("%d%d",&M,&N))
{
num=0;
for(int i=1; i<=N; i++)
{
scanf("%d%d%d",&P[i],&L[i],&n[i]);
for(int j=1; j<=n[i]; j++)
{
int a,b;
scanf("%d%d",&a,&b);
edge[num].u=i;
edge[num].v=a;
edge[num++].w=b; //存入优惠的价格
}
}
int ans=L[1];
int Min=INF;
//最高等级的与最低的等级差不会超过M
for(int i=0; i<=M; i++)
{
memset(has,0,sizeof(has));
for(int j=1; j<=N; j++)
{
if(ans-L[j]<=M-i&&L[j]-ans<=i)
{
has[j]=1;
}
}
int k=Bellman(1);
if(Min>k)
Min=k;
}
printf("%d\n",Min); }
}

poj1062 Bellman 最短路应用的更多相关文章

  1. hdu-1317 XYZZY---Floyd判连通+bellman最短路

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1317 题目大意: 题意:有n个房间(n<=100),每个房间有一个点权(第1号房间和第n号房间 ...

  2. poj 3259 bellman最短路推断有无负权回路

    Wormholes Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 36717   Accepted: 13438 Descr ...

  3. 昂贵的聘礼---poj1062(最短路)

    题目链接:http://poj.org/problem?id=1062 题意很清楚: 可以虚拟一个起点0,由于存在等级关系,所以可以枚举等级,然后把各种关系建立边,然后计算0到1的距离即可,去最小值即 ...

  4. 最短路(bellman)-hdu1217

    Dijkstra算法是处理单源最短路径的有效算法,但它局限于边的权值非负的情况,若图中出现权值为负的边,Dijkstra算法就会失效,求出的最短路径就可能是错的. 这时候,就需要使用其他的算法来求解最 ...

  5. poj题目

    poj2965 poj1753:标准的BFS+位运算优化 poj1328:线段覆盖变种,把圆对应到线段上,贪心求解 poj2109:高精度开根,二分+高精度,注意要判断答案的位数,如果按照题目给的范围 ...

  6. 蓝桥杯 algo_5 最短路 (bellman,SPFA)

    问题描述 给定一个n个顶点,m条边的有向图(其中某些边权可能为负,但保证没有负环).请你计算从1号点到其他点的最短路(顶点从1到n编号). 输入格式 第一行两个整数n, m. 接下来的m行,每行有三个 ...

  7. 最短路(dijskra+SPFA+Bellman)

    最短路 Time Limit : 5000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submissio ...

  8. 蓝桥杯 算法训练 最短路 [ 最短路 bellman ]

    传送门   算法训练 最短路   时间限制:1.0s   内存限制:256.0MB     锦囊1   锦囊2   锦囊3   问题描述 给定一个n个顶点,m条边的有向图(其中某些边权可能为负,但保证 ...

  9. [poj1062]昂贵的聘礼_最短路_离散化

    昂贵的聘礼 poj-1062 题目大意:原文链接?不是英文题,自己看 注释:$1\le N \le 100$. 想法:开始的想法有些过于简单,因为落下了一个条件:就是等级限制是一条路径上的任意两点而不 ...

随机推荐

  1. js得到区域长宽

    网页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;网页可见区域宽: document.body.offset ...

  2. 计数排序(counting-sort)

    计数排序是一种稳定的排序算法,它不是比较排序.计数排序是有条件限制的:排序的数必须是n个0到k的数,所以计数排序不适合给字母排序.计数排序时间复杂度:O(n+k),空间复杂度:O(k),当k=n时,时 ...

  3. Vim配置及使用

    Vim配置 1.打开~/.vimrc,将以下内容考入文件.vimrc中 "行号" set nu "高亮" syntax enable syntax on &qu ...

  4. swoole之memoryGlobal内存池分析

    内存池的作用: 直接使用系统调用malloc会有如下弊端: 频繁分配内存时会产生大量内存碎片 频繁分配内存增加系统调用开销 容易造成内存泄漏 内存池是预先申请一定数量的,大小相等的内存块作为预备使用: ...

  5. [luogu]P4316 绿豆蛙的归宿(拓扑排序,期望)

    P4316 绿豆蛙的归宿 题目背景 随着新版百度空间的上线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 题目描述 给出一个有向无环图,起点为1终点为N,每条边都有一个长度,并且从起点出发能够 ...

  6. CentOS的基本设置界面

    系统的基本设置,如语言.键盘鼠标.时间.网络.壁纸.通知等功能的设置 高级设置:如磁盘分区.系统日志.各种系统分析工具

  7. 【codeforces 348B】Apple Tree

    [题目链接]:http://codeforces.com/problemset/problem/348/B [题意] 给你一棵树; 叶子节点有权值; 对于非叶子节点: 它的权值是以这个节点为根的子树上 ...

  8. 在Linux的终端中显示BMPString的内容

    在上一篇博文中,介绍了怎样在 Windows 的控制台界面下输出 BMPString 的内容,可是那里的方法在 Linux 下不适用.假设将那里的演示样例代码放到 Linux 下运行.输出的结果为乱码 ...

  9. Linux 6.3下安装Oracle Enterprise Cloud Control 12c

    Oracle enterprise cloud control 12c的安装是一个比較复杂的过程,由于他须要依赖于Oracel database以及Oracle Weblogic. 如今Oracle已 ...

  10. Windows下使用python绘制caffe中.prototxt网络结构数据可视化

    准备工具: 1. 已编译好的pycaffe 2. Anaconda(python2.7) 3. graphviz 4. pydot  1. graphviz安装 graphviz是贝尔实验室开发的一个 ...