poj1062 Bellman 昂贵的聘礼

原创 2018年04月17日 18:40:11

题目链接:点击打开链接

这是一道很有意思,也很坑的题。

我是以每个部落的人为节点,以他能交易的东西为边。

等级的判断非常重要,枚举的时候,交易双方的等级都必须在范围内。

附上大牛的测试数据
测试数据1:  
1 4  
10000 3 2  
2 8000  
3 5000  
1000 2 1  
4 200  
3000 2 1  
4 200  
50 2 0  
  
5250  
  
测试数据2:  
1 5  
10000 3 4  
2 3000  
3 2000  
4 2000  
5 9000  
8000 2 3  
3 5000  
4 2000  
5 7000  
5000 1 0  
2000 4 1  
5 1900  
50 1 0  
  
4000  
测试数据3:  
3 8  
10000 3 6  
2 3000  
3 2000  
4 2000  
5 9000  
7 1000  
8 5008  
8000 2 3  
3 5000  
4 2000  
5 7000  
5000 1 1  
6 1000  
2000 4 1  
5 1900  
50 1 0  
5000 1 1  
7 4007  
2000 4 1  
5 1900  
80 3 0  
  
2950  
测试数据4:  
1 10  
1324 0 0  
1234 0 0  
255 0 0  
67 0 0  
56 0 0  
2134 0 0  
456 0 0  
2345 0 0  
67 0 0  
6436 0 0  
  
1324  
  
测试数据5:  
1 4  
10000 3 2  
2 1  
3 3  
1000 2 2  
4 1  
3 1  
1000 3 1  
4 2  
100 4 0  
  
105  
测试数据6:  
3 5  
10000 3 4  
2 3000  
3 2000  
4 2000  
5 9000  
8000 2 3  
3 5000  
4 2000  
5 7000  
5000 1 0  
2000 4 1  
5 1900  
50 1 0  
  
3950 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<string>
using namespace std;
struct ab{
    int u,v,p;//r:等级
}ex[25500];
int node[25500],ranks[25500],rankg[25500];
int n,m,w,cnt;
int bellman(int le){
    int check;
    int dis[25500];
    memset(dis,1,sizeof(dis));
    dis[1]=node[1];

    for(int k=1; k<=n-1; k++) //算法核心
    {
        check=0;

        for(int i=1; i<=cnt; i++)
            if((ranks[ex[i].v]<=m+le&&ranks[ex[i].v]>=le)&&(ranks[ex[i].u]<=m+le&&ranks[ex[i].u]>=le)&&dis[ex[i].v]>dis[ex[i].u]+ex[i].p+node[ex[i].v]){
                dis[ex[i].v]=dis[ex[i].u]+ex[i].p+node[ex[i].v];   //交易的双方都必须在范围内
                check=1;
            }  //进行松弛操作

        if(check==0) break;//检测dis是否有更新,没有就退出循环
        //for(int i=1; i<=cnt; i++) printf("%d ",dis[i]); printf("\n");
    }

    int mins=99999999;
    for(int i=1; i<=cnt; i++){
        if(mins>dis[i])
            mins=dis[i];
    }
    return mins;
}
int main()
{
    int p,l,x,t,v;
    while(scanf("%d%d",&m,&n)!=EOF)
    {
        memset(ex,0,sizeof(ex));
        memset(node,0,sizeof(node));
        cnt=1;
        for(int i=1;i<=n;i++){
            scanf("%d%d%d",&p,&l,&x);
            node[i]=p; ranks[i]=l;
            for(int j=1;j<=x;j++){
                scanf("%d%d",&t,&v);
                ex[cnt].u=i;
                ex[cnt].v=t;
                ex[cnt].p=(v-p); //建图,边为负权
                cnt++;
            }
        }
        int minsum=9999999;
        for(int i=ranks[1]-m;i<=ranks[1];i++){ //枚举等级范围,取最小
            //cout<<rankg[i]<<endl;
            int ss=bellman(i);
            if(ss<minsum) minsum=ss;
        }


            printf("%d\n",minsum);
    }
    return 0;
}

2000年4月全国计算机等级考试三级(B)笔试试卷(下)

2000年4月全国计算机等级考试三级(B)笔试试卷(下)(51) 网络协议的三个要素是语法、语义与  A) 工作原理 B) 时序 C) 进程 D) 服务原语    (52) TCP/IP参考模型中,电...
  • ghj1976
  • ghj1976
  • 2001-04-11 09:32:00
  • 1534

poj1062 昂贵的聘礼 最短路

PS:中文题太爽了。。 题意:中文题我就不写题意了。。。 分析:我感觉要注意两点。。。1.注意等级限制,我本来以为只有在相邻的两个人物中有等级的限制,其实在你需要交换的所有人都有等级的限制。。。2.建...
  • liuqiyao_01
  • liuqiyao_01
  • 2013-05-04 09:35:12
  • 7324

POJ 1062 昂贵的聘礼(限制的最短路)

昂贵的聘礼 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Status ...
  • Inite
  • Inite
  • 2016-03-27 13:55:08
  • 568

POJ -1062 昂贵的聘礼(前向星 && SPFA)

这个题对自己收获挺大的,模板要自己经常敲,才能理解,要自己经常敲,从能温故而知新,自己以前总结的建图方式,做题的时候要会用,要敢用,否则==NULL。...
  • u013497151
  • u013497151
  • 2014-06-12 21:03:37
  • 1012

poj1062昂贵的聘礼【最短路反向建图】

Description 年轻的探险家来到了一个印第安部落里。在那里他和酋长的女儿相爱了,于是便向酋长去求亲。酋长要他用10000个金币作为聘礼才答应把女儿嫁给他。探险家拿不出这么多金币,便请求酋长降低...
  • zhou_yujia
  • zhou_yujia
  • 2016-03-22 18:48:49
  • 360

poj1062昂贵的聘礼(迪杰斯特拉)

这道题我一共见过三次,直到这次才费了好大的劲做出来,太恶心了,希望有生之年不要再碰到这个题 这道题需要注意几个点: 1.酋长不一定是最高等级,可能有他爸爸,他爷爷之类的。。。。。你懂得 2.不能...
  • zcmartin2014214283
  • zcmartin2014214283
  • 2016-03-23 20:18:26
  • 182

POJ 1062 昂贵的聘礼【经典的最短路问题】

原题链接:http://poj.org/problem?id=1062 我的链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=19651...
  • Cfreezhan
  • Cfreezhan
  • 2013-03-01 17:56:12
  • 3031

poj-1062昂贵的聘礼-Bellman-F

中文题,说一下思路,就是把冒险者当成0点,各个物品的价格就是到各个点的距离,然后用BF松驰,要枚举等级差距,因为比如 国王的等级为3,还有两个等级分别为4,2的人,等级限置为1,先与1交易,再与4交易...
  • RIPwangh
  • RIPwangh
  • 2015-08-04 16:58:29
  • 438

【POJ 1062】 昂贵的聘礼

【POJ 1062】 昂贵的聘礼
  • ChallengerRumble
  • ChallengerRumble
  • 2015-06-20 00:45:30
  • 1366

POJ 1062 - 昂贵的聘礼 - 经典题

1.Question: 中文题不说什么了 2.Solution: 本题的难点有两个 1.建图 2.限制 建图: 首先,我们需要明确本图G是一个有向图,我们的顶点代表庙我们的物品的编号,图采用邻接矩...
  • ltyqljhwcm
  • ltyqljhwcm
  • 2016-11-30 17:57:26
  • 457
收藏助手
不良信息举报
您举报文章:poj1062 Bellman 昂贵的聘礼
举报原因:
原因补充:

(最多只允许输入30个字)