POJ上难得一见的中文题……

思路:建立一个以0为源点的地图,那么Map[0][n]的值代表 第n号物品的价值,Map[i][j]代表用 j  替代 i 后,物品j的价值。我们认为酋长的承诺为节点 ‘1’ ,则我们需要做的就是通过一系列操作求出Map[0][1]的最小值,这时可以看出 这是一个最短路问题。题目还规定了,等级高的不会同意与等级低的交换,等级低的亦不会和高于自身m个级别的人交换,所以我们先来个简单的预处理:通过枚举1~N所有点作为最小等级,然后标记出所有非法点。

这样一来就是纯粹的最短路问题了。

#include<stdio.h>
#include<string.h>
#include<cstring>
#include<string>
#include<math.h>
#include<queue>
#include<algorithm>
#include<iostream>
#include<stdlib.h>
#include<cmath> #define INF 0x3f3f3f3f
#define MAX 1005 using namespace std; int vis[MAX],dist[MAX],n,m,Map[MAX][MAX]; struct node
{
int p,l,x;
}a[MAX]; int dij()
{
int i,j,minn,k; for(i=1;i<=n;i++)
dist[i]=Map[0][i]; for(i=1;i<n;i++)
{
minn=INF;
for(j=1;j<=n;j++)
{
if(!vis[j] && dist[j] < minn)
{
minn=dist[j];
k=j;
}
} vis[k]=1; for(j=1;j<=n;j++)
{
if(dist[j] > dist[k] + Map[k][j] && !vis[j])
dist[j]=Map[k][j]+dist[k];
}
} return dist[1];
} int main()
{
int i,j,x,w; while(scanf("%d%d",&m,&n)!=EOF)
{
for(i=0;i<MAX;i++)
for(j=0;j<MAX;j++)
Map[i][j]=INF; for(i=1;i<=n;i++)
{
scanf("%d%d%d",&a[i].p,&a[i].l,&a[i].x); Map[0][i]=a[i].p; for(j=1;j<=a[i].x;j++)
{
scanf("%d%d",&x,&w); Map[x][i]=w;
}
} int minn=INF; for(i=1;i<=n;i++)//枚举最小等级
{
for(j=1;j<=n;j++)
{
if(a[i].l < a[j].l || a[i].l-a[j].l > m)
vis[j]=1;//标记出非法点
else
vis[j]=0;
} minn=min(dij(),minn);
}
printf("%d\n",minn);
}
return 0;
}

  

POJ 1062 昂贵的聘礼详解最短路变形的更多相关文章

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

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

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

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

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

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

  4. POJ 1062 昂贵的聘礼

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

  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 昂贵的聘礼(前向星 &amp;&amp; SPFA)

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

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

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

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

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

随机推荐

  1. leetcode383

    已知两个字符串,然后比较一个字符串是否来自另一个字符串,没有顺序要求. 简单题,用一个数组保存前一个字符串的每一个字符出现的次数,然后循环后一个字符串去检查,如果次数不够了,那么就返回false pu ...

  2. excel中自动变为插入语句的写法

    =concatenate("insert into t(b,c) values('",b1,"','",c1,"');")

  3. MySQL的数据类型【总结】

    1.时间类型 MySQL的DateTime,TimeStamp,Date和Time数据类型. DATETIME类型用在你需要同时包含日期和时间信息的值时.MySQL检索并且以'YYYY-MM-DD H ...

  4. git 创建分支,删除分支,管理分支

    参考  http://blog.csdn.net/dijason/article/details/9042425   查看分支: 1 查看本地分支: $ git branch 2 查看远程分支 $ g ...

  5. c++11 对象池的实现

    ; template <typename T> class ObjectPool { template <typename... Args> using Constructor ...

  6. xmlHTTP技术资料

    一.数据库远程管理技术 基于互联网的广域网现代应用中的一个重要环节是数据库远程监控.首先简单回顾一下互联网上的数据库远程管理技术的发展过程和方式: 早期通过编写CGI-BIN程序模块进行数据库远程管理 ...

  7. 从头到尾彻底解析Hash表算法

    作者:July.wuliming.pkuoliver 说明:本文分为三部分内容, 第一部分为一道百度面试题Top K算法的详解:第二部分为关于Hash表算法的详细阐述:第三部分为打造一个最快的Hash ...

  8. MyBatis中Like语句使用方式

    oracle数据库: SELECT * FROM user WHERE name like CONCAT('%',#{name},'%') 或 SELECT * FROM user WHERE nam ...

  9. Day03——类、值和对象

    1.js数字-NaN和Infinity 1.在js中,有一种特殊的数值,叫做NaN(Not a Number),表示本来要返回数值的操作却未返回数值的情况,例如0除以0的操作,在其它语言中会报错误或异 ...

  10. 【转】关于C execlp函数的理解

    转自:http://bachue.is-programmer.com/posts/21611.html execlp(从PATH 环境变量中查找文件并执行) 相关函数 fork,execl,execl ...