昂贵的聘礼 POJ - 1062(最短路)
为了方便起见,我们把所有的物品从1开始进行编号,酋长的允诺也看作一个物品,并且编号总是1。每个物品都有对应的价格P,主人的地位等级L,以及一系列的替代品Ti和该替代品所对应的"优惠"Vi。如果两人地位等级差距超过了M,就不能"间接交易"。你必须根据这些数据来计算出探险家最少需要多少金币才能娶到酋长的女儿。
Input
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 思路:我看网上的写法是 酋长等级为Q ,则可行区间为 【Q-m,Q】 ...... 【Q,Q+m】,枚举每个区间,然后不在区间内的点就不加入最短路,跑m遍最短路
我用了另一种写法,总感觉有点搜索的意思,在优先队列中存入的结构体中记录当前路径所走过的最高等级和最低等级,超过m就放弃这路径,否则更新
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std; int m,n;
struct Node
{
int s;
int low,high;
int val;
Node(int s=,int low=,int high=,int val=):s(s),low(low),high(high),val(val){}
bool operator<(const Node x)const
{
return val > x.val;
}
}; struct N
{
int y;
int next;
int val;
}node[]; int cnt,head[],level[];
void add(int x,int y,int val)
{
node[++cnt].y=y;
node[cnt].val =val;
node[cnt].next=head[x];
head[x]=cnt;
} priority_queue<Node>que;
int dist[];
bool vis[];
void dijstra()
{
while(!que.empty())que.pop();
que.push(Node(,level[],level[],));
memset(dist,0x3f,sizeof(dist));
while(!que.empty())
{
Node tmp = que.top();
que.pop();
if(vis[tmp.s])continue;
vis[tmp.s]=;
dist[tmp.s] = tmp.val;
for(int i=head[tmp.s];i;i=node[i].next)
{
int to = node[i].y;
int low = min(tmp.low,level[to]);
int high = max(tmp.high,level[to]);
if(dist[to] > tmp.val + node[i].val && high - low <= m)
{
que.push(Node(to,low,high,tmp.val+node[i].val));
}
} }
} int main()
{
scanf("%d%d",&m,&n);
for(int i=;i<=n;i++)
{
int p,l,x;
scanf("%d%d%d",&p,&l,&x);
level[i] = l;
add(,i,p);
for(int j=;j<=x;j++)
{
int t,num;
scanf("%d%d",&t,&num);
add(t,i,num);
}
}
dijstra();
printf("%d\n",dist[]);
}
昂贵的聘礼 POJ - 1062(最短路)的更多相关文章
- (最短路 dijkstra)昂贵的聘礼 -- poj -- 1062
链接: http://poj.org/problem?id=1062 昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000K Total Submissions ...
- 昂贵的聘礼 - poj 1062 (Dijkstra+枚举)
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 39976 Accepted: 11596 Description 年 ...
- 昂贵的聘礼 POJ - 1062
题目链接:https://vjudge.net/problem/POJ-1062 如图,我们可以把交换的情况,抽象为一个有向图, 先抛去等级限制,那么就是一个最短路,从①出发,到达其他点的最短路中 最 ...
- poj 1062 昂贵的聘礼 (dijkstra最短路)
题目链接:http://poj.org/problem?id=1062 昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000K Total Submission ...
- POJ 1062 昂贵的聘礼详解最短路变形
POJ上难得一见的中文题…… 思路:建立一个以0为源点的地图,那么Map[0][n]的值代表 第n号物品的价值,Map[i][j]代表用 j 替代 i 后,物品j的价值.我们认为酋长的承诺为节点 ‘ ...
- 昂贵的聘礼,(最短路的应用),Poj(1063)
题目链接:http://poj.org/problem?id=1062 很好的一道中文题. 思路: 把每种替换当做一条边,权重为交易优惠,就是求原点0到物品1的最短路. 这里有限制条件,每个节点还有等 ...
- 昂贵的聘礼---poj1062(最短路)
题目链接:http://poj.org/problem?id=1062 题意很清楚: 可以虚拟一个起点0,由于存在等级关系,所以可以枚举等级,然后把各种关系建立边,然后计算0到1的距离即可,去最小值即 ...
- poj1062昂贵的聘礼(枚举+最短路)
题意:就是一个点能够被另一个点取代,通过花费一定的金币,注意就是你和某个人交易了,如果这个人的等级和酋长的等级差的绝对值超过m,酋长就不会和你交易了: 思路:这里要注意到,我们最终的目的是找到一条最短 ...
- POJ 1062 最短路Dijstra
汉语题... 题意正如你看到的酱... 看的解题报告.思路大概是把每个点看做最高等级.然后枚举所有当前可以访问的点.进行dijstra算法.找到此时到目标点最短路.枚举完之后找到最小的点就可以了. P ...
随机推荐
- GIT-Linux(CentOS7)系统部署git服务器
GIT-Linux(CentOS7)系统部署git服务器 root账号登录 一. 安装并配置必要的依赖关系在CentOS系统上安装所需的依赖:ssh,防火墙,postfix(用于邮件通知) ,wget ...
- react-intl
internationalization standard https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Glob ...
- WebGL教程
https://www.w3cschool.cn/webgl/rleo1oh7.html
- python3 练手实例7 斐波那契数列
'''a,b=0,1 x=int(input('请指定需要多少项:')) while x>0: print(b) a,b=b,a+b x-=1''' #递归 def fibo(n): if n& ...
- Groovy里面闭包中变量符号的查找与变量定义的限制
class a { def v1 = "v1 in a" static def v2 = "v2 in a" def v4 = "v4 in a&qu ...
- 开发一个项目之npm
npm (nodejs平台上写的js模块的管理工具 下载.互相依赖等) npm install 本地项目的node_modules文件夹 , -g npm config prefix 目录eg: ...
- 修改elementui默认样式
转发连接:https://blog.csdn.net/weixin_41557291/article/details/80606525 在需要更改的组件里新增一个style标签[重点:不要加scope ...
- python&JSONP(初级篇)
JSONP产生背景 1.跨域的安全限制都是对浏览器端来说的,服务器端是不存在跨域安全限制的. 2.浏览器的同源策略限制从一个源加载的文档或脚本与来自另一个源的资源进行交互. 3.如果协议,端口和主机对 ...
- Maven - <Profile>详解
转载自:https://www.cnblogs.com/wxgblogs/p/6696229.html Profile能让你为一个特殊的环境自定义一个特殊的构建:profile使得不同环境间构建的可移 ...
- JVM虚拟机和垃圾回收算法
类加载机制 双亲委派模型 垃圾回收算法 CMS G1 类加载机制 双亲委派模型 双亲委派模型: 需要加载一个类,先委托父类加载,父类找父类,依次递归加载;加载不到再由自己加载 垃圾回收算法 JVM的内 ...