昂贵的聘礼 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 ...
随机推荐
- font-spider问题【已解决】
最近写一个项目,使用了引入的字体,然而字体太大,于是找解决方法,想要把字体压缩一下,然后找到了font-spider;font-spider使用方法这里就不多说了,网上一大把,主要是在node里面安装 ...
- 如何安装 PhoneGap / Cordova (for Win10)
最近需要配置 PhoneGap / Cordova 环境,折腾了一阵子,写篇博客 Mark 一下整个过程. 具体参照了:http://www.assortedgarbage.com/apigee/ 以 ...
- Vue打包优化之分析工具webpack-bundle-analyzer
// 1. 安装 cnpm install webpack-bundle-analyzer --save-dev // 2. 在/build/webpack.prod.conf.js文件中引入 con ...
- JVM垃圾回收机制概述
JVM垃圾回收机制概述 1.定义 是指JVM用于释放那些不再使用的对象所占用的内存. 2.方式 2.1引用计数(早期) 当引用程序创建引用以及引用超出范围时,JVM必须适当增减引用数.当某个对象的引用 ...
- WebGL&Three.js工作原理
一.我们讲什么? 我们讲两个东西:1.WebGL背后的工作原理是什么?2.以Three.js为例,讲述框架在背后扮演什么样的角色? 二.我们为什么要了解原理? 我们假定你对WebGL已经有一定了解,或 ...
- springBoot和Mybatis输出sql日志
利用slf4j来输出日志. 首先需要版本兼容的slf4j-log4j12.log4j.slf4j-api.slf4j-nop.slf4j-simple这5个包. 可以去maven知识库中找到这5个包的 ...
- request redirection
# encoding:utf-8 import reimport jsonimport randomfrom esdapi.config import BASE_URLfrom requests.se ...
- 关于macOS 管理员(Admin)权限问题。
最近突然想改下用户名,于是在用户与组里解锁,然后两个手指点击用户那一行,更改fullname,不过出于好奇把uid和uuid也改了. 之后发现current user等级由Admin变成Standar ...
- ASP.NET后台调用API方法
/// <summary> /// 调用API POST请求与获取结果 /// </summary> ///URL 与 JSON串 public static string H ...
- javascript嵌套java实现jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...