POJ 1062 Dijkstra

原创 2016年08月28日 21:12:18

POJ少有的中文题 (很久之前就想写来着,但是原来不会啊…..)
思路:
首先我们可以新建一个点,从这个点向每个物品连一条权值为这个物品价值的边 (这样就把点权转化成了边权对吧……)
我们已经知道了一个物品的替代品是啥,那么就可以从每个替代品向这个物品连一条边权为替代品价值的边。
是不是很有道理。。。

随后枚举区间 (区间里得包括酋长的地位)

每次枚举从新建的点向一号点跑一遍Dijkstra就OK了。

//By SiriusRen
#include <queue>
#include <cstdio>
#include <cstring>
#define N 100050
using namespace std;
int n,m,xx,yy,zz,ww,vis[105],d[105],answer=0x3fffffff;
int tot=0,first[105],next[N],v[N],w[N],p[105];
void add(int from,int to,int weight){
    v[tot]=to;w[tot]=weight;
    next[tot]=first[from];first[from]=tot++;
}
struct Node{int position,weight;}top,jy;
bool operator < (Node a,Node b){
    return a.weight>b.weight;
}
priority_queue<Node>pq;
int main(){
    scanf("%d%d",&m,&n);
    memset(first,-1,sizeof(first));
    for(int i=1;i<=n;i++){
        scanf("%d%d%d",&xx,&p[i],&zz);
        add(0,i,xx);
        while(zz--){
            scanf("%d%d",&xx,&ww);
            add(xx,i,ww);
        }
    }
    for(int T=-m;T<=0;T++){
        memset(d,0x3f,sizeof(d));
        memset(vis,0,sizeof(vis));
        xx=p[1]+T;yy=p[1]+T+m;
        d[0]=jy.position=0,jy.weight=0;pq.push(jy);
        while(!pq.empty()){
            top=pq.top();pq.pop();
            if(vis[top.position])continue;
            vis[top.position]=1;
            for(int i=first[top.position];~i;i=next[i])
            {
                if(d[v[i]]>d[top.position]+w[i]&&!vis[v[i]]&&p[v[i]]>=xx&&p[v[i]]<=yy)
                {
                    d[v[i]]=d[top.position]+w[i];
                    jy.position=v[i];
                    jy.weight=top.weight+w[i];
                    pq.push(jy);
                }
            }
        }
        answer=min(answer,d[1]);
    }
    printf("%d\n",answer);
}

这里写图片描述

版权声明:本文由SiriusRen原创,但可以转载,因为我们是兄弟 爬虫能爬到这句话么哈哈哈

相关文章推荐

poj 1062 昂贵的婚礼 最短路 dijkstra 解题报告

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

POJ - 1062( dijkstra+枚举)

昂贵的聘礼年轻的探险家来到了一个印第安部落里。在那里他和酋长的女儿相爱了,于是便向酋长去求亲。酋长要他用10000个金币作为聘礼才答应把女儿嫁给他。探险家拿不出这么多金币,便请求酋长降低要求。酋长说:...
  • siyutt
  • siyutt
  • 2017年08月07日 16:08
  • 47

POJ-1062 昂贵的聘礼 (dijkstra算法)

poj-1062 昂贵的聘礼 (dijstra算法)

poj1062-dijkstra算法

点击打开链接 题目分析: 最短路径,用dijkstra算法可一个实现。就是多了限制条件。 用枚举方法。 代码; #include #include #define max 1000000...

POJ 1062 昂贵的聘礼(dijkstra)

poj 1062 题目大意 给一个图(N
  • mmy1996
  • mmy1996
  • 2016年08月16日 21:38
  • 165

POJ 1062 枚举+dijkstra()

这道题真TMD恶心,,写了一天,wr了十几次。。。。。。。。崩溃啊。。。。。。各种wr,各种崩溃,最后枚举+dijkstra+优先队列。。。。。。纠结啊。题目: 昂贵的聘礼 ...
  • wmn_wmn
  • wmn_wmn
  • 2012年03月15日 15:14
  • 598

最短路径——Dijkstra算法扩展(hdu2066,poj1062)

*本文介绍了一些Dijkstra的变型例题,对Dijkstra算法不是很了解了可以移步上篇博客 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=20...
  • sm9sun
  • sm9sun
  • 2016年11月22日 12:28
  • 276

poj 1062 昂贵的聘礼 Dijkstra算法,中等难度,,,内有测试数据,一道让我累觉不爱的题目

昂贵的聘礼 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 38474   Accepted: 11132 ...

POJ 1062 priority_queue + Dijkstra (临界表) 实现

首先题目的意思很容易理解,都是中文的。 这题是Dijkstra的一个变形, 思路是:   以物品为结点,物品之间的优惠价格为边权值建立临界表,题意就是求图中结点1到其他结点的最短路长度(注意...
  • lqcsp
  • lqcsp
  • 2013年06月02日 15:03
  • 554

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

中文题面...不多说... 能优惠的建边...按照等级枚举一下...求最小就好了..不多说..写这题的时候犯了几次SB错误...改了好久 #include #include #include #i...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ 1062 Dijkstra
举报原因:
原因补充:

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