汉语题。。。 题意正如你看到的酱。。。

看的解题报告。思路大概是把每个点看做最高等级。然后枚举所有当前可以访问的点。进行dijstra算法。找到此时到目标点最短路。枚举完之后找到最小的点就可以了。

POJ还在继续BUG中。。。。。代码应该是对的没有AC。。。。

附代码:

#include<stdio.h>
#include<string.h>
#include<iostream>
#define maxn 210
#define inf 0x1f1f1f1f
using namespace std;

bool vis[maxn];   // 表示是否访问过
int dist[maxn]; // 源点到目标点的价格。即原价
int price[maxn][maxn]; // price[t][i]表示替代品是t时i的价格。
int x[maxn]; //x[i]表示i物品有多少替代品。
int min_p, temp_p;
int m, n;
int lv[maxn]; // lv[i]表示i物品主人的等级

void init()
{
    memset(lv, 0, sizeof(lv));
    memset(dist, inf, sizeof(dist));
    memset(price, 0, sizeof(price));
    memset(vis, false, sizeof(vis));
    min_p = inf;
}

int dijstra()
{
    temp_p = 0;
    for (int i=1; i<=n; ++i)
    {
        dist[i] = price[0][i];
    }
    for (int i=1; i<=n; ++i)
    {
        int mmin = inf;
        int k = 0;
        for (int j=1; j<=n; ++j)
        {
           if (!vis[j] && dist[j] < mmin)
           {
               mmin = dist[j];
               k = j;
           }
        }
        if (k == 0) break;
        vis[k] = true;
        temp_p += mmin;
        for (int j=1; j<=n; ++j)
        {
            if (!vis[j] && price[k][j] > 0 && dist[j] > dist[k] + price[k][j])
                dist[j] = dist[k] + price[k][j];
        }
    }
    return dist[1];
}

int main()
{
    while(cin >> m >> n)
    {
        init();
        for (int i=1; i<=n; ++i)  // 物品标号从1到n.
        {
            cin >> price[0][i] >> lv[i] >> x[i];
            for (int j=0; j<x[i]; ++j)
            {
                int t, v;
                cin >> t >> v;
                price[t][i] = v;
            }
        }
        for (int i=1; i<=n; ++i)  // 把每个点作为最高等级 尝试遍历寻找到目标点1的最短路
        {
            for (int j=1; j<=n; ++j)
            {
                if (lv[j] > lv[i] || lv[i] - lv[j] > m)
                    vis[j] = true;
                else vis[j] = false;
            }
            //cout << temp_p << "==\n";
            temp_p = dijstra();
            if (temp_p < min_p)
                min_p = temp_p;
        }
        cout << min_p << endl;
    }
    return 0;
}
附参考出处:http://blog.csdn.net/lyy289065406/article/details/6645852

POJ 1062 最短路Dijstra的更多相关文章

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

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

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

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

  3. POJ 1062 昂贵的聘礼

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

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

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

  5. Heavy Transportation POJ 1797 最短路变形

    Heavy Transportation POJ 1797 最短路变形 题意 原题链接 题意大体就是说在一个地图上,有n个城市,编号从1 2 3 ... n,m条路,每条路都有相应的承重能力,然后让你 ...

  6. POJ 1062 昂贵的聘礼 最短路 难度:0

    http://poj.org/problem?id=1062 #include <iostream> #include <cstring> #include <queue ...

  7. poj 1062(有限制的最短路)

    题目链接:http://poj.org/problem?id=1062 思路:要求对于最短路上的点,不能出现等级之差大于m,于是我们可以枚举,假设酋长的等级为level,于是这个区间范围[level- ...

  8. poj 1062 昂贵的聘礼(最短路 dijk+枚举)

    终于A 了,这题做着真麻烦 题目:http://poj.org/problem?id=1062 dijk 一般用于正权有向图 此题的关键在于等级限制的处理,最好的办法是采用枚举,即假设酋长等级为5,等 ...

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

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

随机推荐

  1. CAN/J1850/

    (1)CAN:(差分信号)有信号CANH=3.5V,CANL=1.5V, 没有信号CANH=2.5V,CANL=2.5V 速率:CAN系统又分为高速和低速,高速CAN系统采用硬线是动力型,速度:500 ...

  2. 洛谷 P2056 采花 - 莫队算法

    萧芸斓是 Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了 n 朵花,花有 c 种颜色(用整数 1-c 表示) ,且花是排成一排的,以 ...

  3. leetcode 最长有效括号

    给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 示例 1: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()&quo ...

  4. css未知宽高的盒子div居中的多种方法

    不知道盒子大小.宽高时,如何让盒子上下左右居中? 应用场景:比如上传图片时,并不知道图片的大小,但要求图片显示在某盒子的正中央. 方法1:让4周的拉力均匀-常用 <!-- Author: Xia ...

  5. 不在同一主机:vsftpd+pam+mysql

    配置环境:Centos7上的mariadb + Centos6上的vsftpd 一.安装所需要程序 1.安装vsftpd和pam_mysql(在centos6-->192.168.108.160 ...

  6. POJ 1753 Flip Game(bfs+位压缩运算)

    http://poj.org/problem?id=1753 题意:一个4*4的棋盘,只有黑和白两种棋子,每次翻转一个棋子,并且其四周的棋子也跟着翻转,求棋盘全为黑或全为白时所需的最少翻转次数. 思路 ...

  7. 【Python】【数据类型】

    [序列更新&散列&切片]"""from array import arrayimport reprlibarray1 = array('d',(1,2,3 ...

  8. [框架模式]经典的模型视图控制器模式MVC

    参考:<设计模式> http://blog.csdn.net/u010168160/article/details/43150049 百度百科 引言: Model(模型)是应用程序中用于处 ...

  9. spring boot开发 @autowired注入失败

    @autowired注入失败 会出现如下错误提示: 2018-05-28 08:39:41.857 INFO 8080 --- [ restartedMain] org.hibernate.Versi ...

  10. js 中面向对象的多态

    什么是多态: 实际上是不同对象作用与同一操作产生不同的效果.多态的思想实际上是把“想做什么”和“谁去做“分开,多态的好处是什么呢?为什么要多态?我们来看看 Martin Fowler 在<重构: ...