奢侈的旅行

Time Limit: 14000/7000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others)

Problem Description

高玩小Q不仅喜欢玩寻宝游戏,还喜欢一款升级养成类游戏。在这个游戏的世界地图中一共有n个城镇,编号依次为1到n。

这些城镇之间有m条单向道路,第i 条单项道路包含四个参数ui,vi,ai,bi,表示一条从ui号城镇出发,在vi号城镇结束的单向道路,因为是单向道路,这不意味着小Q可以从vi沿着该道路走到ui。小Q的初始等级level为1,每当试图经过一条道路时,需要支付cost=log2level+ailevel点积分,并且经过该道路后,小Q的等级会提升ai级,到达level+ai级。但是每条道路都会在一定意义上歧视低消费玩家,准确地说,如果该次所需积分cost<bi,那么小Q不能经过该次道路,也不能提升相应的等级。

注意:本游戏中等级为正整数,但是积分可以是任意实数。

小Q位于1号城镇,等级为1,现在为了做任务要到n号城镇去。这将会是一次奢侈的旅行,请写一个程序帮助小Q找到需要支付的总积分最少的一条路线,或判断这是不可能的。

Input

第一行包含一个正整数T(1≤T≤30),表示测试数据的组数。

每组数据第一行包含两个整数n,m(2≤n≤100000,1≤m≤200000),表示城镇数和道路数。

接下来m行,每行四个整数ui,vi,ai,bi(1≤ui,vi≤n,ui≠vi,0≤ai≤109,0≤bi≤60),分别表示每条单向道路。

Output

对于每组数据,输出一行一个整数,即最少所需的总积分的整数部分,如:4.9999输出4,1.0输出1。若不存在合法路线请输出−1。

Sample Input

1
3 3
1 2 3 2
2 3 1 6
1 3 5 0

Sample Output

2

Source

"字节跳动杯"2018中国大学生程序设计竞赛-女生专场

Recommend

liuyiding

题解:根据(loga + logb) = logab这一个公式可以得到消耗总积分为log2(1+Sn),尽量让最后的等级小就可以了,这样可以把等级看做边的权值,求以b为限制的最短路。
优先想到Dijstra,但数据量特别大,所以需要用堆优化,基本是抄的模板。
(上面都是废话,附上官方题解)

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <vector>
#include <queue>using namespace std;
const int maxn = 1000050;
const long long INF = 1e17+7;struct qnode
{int v;long long c;qnode(int _v=0,long long _c=0):v(_v),c(_c){}bool operator <(const qnode &r)const{return c>r.c;}
};
struct Edge
{int to,w,MIN;Edge(int _to,int _w,int _MIN):to(_to),w(_w),MIN(_MIN){}
};vector<Edge>E[maxn];
bool vis[maxn];
long long dis[maxn];void Dijstra(int n,int start)
{memset(vis,false,sizeof(vis));for(int i=1;i<=n;i++)dis[i] = INF;priority_queue<qnode> que;while(!que.empty()) que.pop();dis[start] = 1;que.push(qnode(start,1));qnode tmp;while(!que.empty()){tmp = que.top();que.pop();int u = tmp.v;if(vis[u])continue;vis[u] = true;for(int i=0;i<E[u].size();i++){int v = E[u][i].to;int w = E[u][i].w;if(log2((dis[u]+w*1.0) / dis[u]*1.0)<E[u][i].MIN)continue;if(!vis[v]&&dis[v]>dis[u]+w){dis[v] = dis[u] + w;que.push(qnode(v,dis[v]));}}}//cout<<dis[n]<<endl;if(dis[n]==INF)printf("-1\n");elseprintf("%d\n",(int)log2(dis[n]));
}int main()
{int t,m,i,a,b,c,d,n;scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);for(i=1;i<=n;i++)E[i].clear();for(i=0;i<m;i++){scanf("%d%d%d%d",&a,&b,&c,&d);E[a].push_back(Edge(b,c,d));}Dijstra(n,1);}return 0;
}

转载于:https://www.cnblogs.com/luoxiaoyi/p/9726829.html

HDU-6290_奢侈的旅行(Dijstra+堆优化)相关推荐

  1. 【HDU - 6290】 奢侈的旅行 (对题目预处理 + DIjkstra最短路)

    题干: 高玩小Q不仅喜欢玩寻宝游戏,还喜欢一款升级养成类游戏.在这个游戏的世界地图中一共有nn个城镇,编号依次为11到nn. 这些城镇之间有mm条单向道路,第ii 条单项道路包含四个参数ui,vi,a ...

  2. HDU 4725 层级最短路 思维建图 邻接表 堆优化迪杰斯特拉 真的难想 区域网络赛真题

    题目 题解思路 知道是最短路,怎么建图呢? 一开始想到每层来一个超级源点,但是方向不知道怎么确定,用双向边果然WA了(如果是双向边,那一层的都会变成0费连通了 ). 翻了翻 大佬的博客 大佬定义了一种 ...

  3. A - Age of Moyu HDU - 6386(Dijkstra+堆优化)

    要解决这道题,可以用dfs+bfs,但是我不会,所以我只会dijkstra算法: 要解决这道题必须明白迪杰斯特拉算法的核心思想,我是这样理解的: 我可以任意举例一个图: 比如这个图,那么求1-6的最短 ...

  4. 最短路[Dijkstra和堆优化的Dijkstra][Bellman-Ford和SPFA][Floyd最短路](更新中)

    文章目录 第一类:单源最短路 一 所有边权都是正数(Dijkstra) 朴素版Dijkstra(稠密图) 堆优化版Dijkstra(稀疏图) 二 存在负权边(BF和SPFA) 第二类:多源汇最短路(F ...

  5. 链式前向星dij堆优化

    链式前向星 nextnextnext指的是上一条同起点边的位置,tototo表示这条边的终点,valvalval表示边权. u.v.valu.v.valu.v.val分别表示起点,终点,边权. hea ...

  6. 最短路径算法Dijstra及优化

    1.算法简介 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题.迪杰斯特 ...

  7. 可持久化Trie+堆优化 OR Trie树上求XOR第K大 ---- P5283 [十二省联考2019]异或粽子

    题目大意 题目大意: 考虑先做个 prefix xor 前缀异或bi=⨁j=1iaj(1≤i≤n)b_i=\bigoplus_{j=1}^{i}a_j(1\leq i \leq n)bi​=j=1⨁i ...

  8. USACO07DEC道路建设Building Roads(prim算法+堆优化与Kruskal+路径压缩对比)

    目录 primprimprim算法 KruskalKruskalKruskal算法 P2872 [USACO07DEC]道路建设Building Roads 4 1 1 1 3 1 2 3 4 3 1 ...

  9. PAT甲级1131 Subway Map (30分):[C++题解]堆优化dijkstra、单源最短路、地铁地图、巧妙地建图套dijkstra模板!!

    文章目录 题目分析 题目链接 题目分析 原题: 来源:acwing 分析: 建图:所有能走到的点之间建立一条边,比如下面一条地铁线路有4站,它们是相通的,两两之间建一条边,边权是经过的站点数. 下面考 ...

最新文章

  1. 输入今天是星期几的序号,给今天和昨天赋予枚举值,并输出昨天是星期几的枚举值
  2. Tomcat单机多实例
  3. DNS 网关 路由 交换机 网桥 协议 服务器 这些都是什么关系?
  4. Zynq ZC702平台 QSPI + eMMC实现
  5. 容器编排技术 -- 从零开始k8s
  6. 笔记 - 收藏集 - 掘金
  7. oracle 大批量数据更新
  8. 【牛腩新闻发布系统】一步步演化的SQLHelper
  9. matlab仿真模糊PID控制,模糊PID控制及其MATLAB仿真
  10. 小米获取屏幕高度不准确-小米获取屏幕高度的兼容方案
  11. 微软成功收购雅虎五大理由:可抗衡谷歌
  12. tableau之企业经营分析看版设计
  13. 性价比打过折的故宫紫禁城
  14. dex2jiar在压缩classes.dex的时候出现的问题
  15. js-url转换blob以及blob与base64的相互转换
  16. python发送邮件封装
  17. 【图像分类】2022-CMT CVPR
  18. 什么是广播风暴,如何防止局域网环路引起的广播风暴?
  19. 为什么不建议程序员做:“外包”?看完本文,相信你可以明白
  20. 2019年美赛建模D题后续(2)

热门文章

  1. defunct 进程占用端口_Linux如何查询哪些端口被占用
  2. gomarket服务器位置,ANZHI安智市场 Gomarket
  3. 注册不上zookeeper无报错_Zookeeper 跨区高可用方案
  4. mysql存储的判断if_if在数据库mysql存储中判断
  5. java path设置错误_linux下环境变量PATH设置错误的补救
  6. MediaSession框架介绍
  7. 四章: CentOS6.5 配置连接Windows远程桌面、创建新用户、禁用root在本地或远程使用ssh登录
  8. 数据库——高级匹配条件
  9. 如何对比_潭酒红潭酱酒对比红花郎怎么样口感如何
  10. prototype.js ajax.request,prototype.js的Ajax对象分享