hdu6290 奢侈的旅行
最短路算法的复杂度考虑
书上已经做了优化,用的是优先队列;用优先队列实现堆优化
V为点集,E为边集
从O(V^2)优化到O(ElogV)
然后再记忆一下inf
0x3f3f3f3f的十进制是1061109567,是10^9级别的而一般场合下的数据都是小于10^9的,所以它可以作为无穷大使用而不致出现数据大于无穷大的情形。
另一方面,由于一般的数据都不会大于10^9,所以当我们把无穷大加上一个数据时,它并不会溢出(这就满足了“无穷大加一个有穷的数依然是无穷大”),事实上0x3f3f3f3f+0x3f3f3f3f=2122219134,这非常大但却没有超过32-bit int的表示范围,所以0x3f3f3f3f还满足了我们“无穷大加无穷大还是无穷大”的需求。
将无穷大设为0x3f3f3f3f,,0x3f3f3f3f的每个字节都是0x3f!所以要把一段内存全部置为无穷大,我们只需要memset(a,0x3f,sizeof(a))。
就要注意inf的设置,是否要1LL<<60;
题解:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <queue>
#include <vector>
using namespace std;
const int maxn = ;
const long long INF = 1ll<<; //这里一开始用了0x3f3f3f3f...sb了 struct qnode
{
int v;
long long c;
qnode(int v=,long long c=):v(v),c(c){}
bool operator <(const qnode &r)const
{
return c>r.c;
}
};
struct Edge
{
int to;
int 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=;i<=n;i++)
dis[i] = INF;
priority_queue<qnode> que;
while(!que.empty()) que.pop();
dis[start] = true;
que.push(qnode(start,));
qnode tmp;
while(!que.empty())
{
tmp = que.top();
que.pop();
int u = tmp.v;
if(vis[u])
continue;
vis[u] = ;
for(int i=;i<E[u].size();i++)
{
int v = E[u][i].to;
int a = E[u][i].w;
if(log2((dis[u]+a*1.0) / dis[u]*1.0)<E[u][i].MIN)
//if((a/dis[u])<E[u][i].MIN) //这里不乘1.0也可以
continue;
if(!vis[v]&&dis[v]>dis[u]+a) //这里的!VIS重要
{
dis[v] = dis[u] + a;
que.push(qnode(v,dis[v]));
}
}
}
if(dis[n]==INF)
printf("-1\n");
else
printf("%d\n",(int)log2(dis[n]*1.0));
} int main()
{
int t,m,u,v,n;
int a,b;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
E[i].clear();
for(int i=;i<m;i++)
{
scanf("%d%d%d%d",&u,&v,&a,&b);
//b=(1ll<<b)-1;
E[u].push_back(Edge(v,a,b));
}
Dijstra(n,);
}
return ;
}
hdu6290 奢侈的旅行的更多相关文章
- hdu6290奢侈的旅行
高玩小Q不仅喜欢玩寻宝游戏,还喜欢一款升级养成类游戏.在这个游戏的世界地图中一共有n个城镇,编号依次为1到n. 这些城镇之间有m条单向道路,第i 条单项道路包含四个参数ui,vi,ai,bi,表示一条 ...
- HDU-6290 奢侈的旅行 (Dijkstra+堆优化)
高玩小Q不仅喜欢玩寻宝游戏,还喜欢一款升级养成类游戏.在这个游戏的世界地图中一共有nn个城镇,编号依次为11到nn.这些城镇之间有mm条单向道路,第ii 条单项道路包含四个参数ui,vi,ai,biu ...
- HDU-6290_奢侈的旅行(Dijstra+堆优化)
奢侈的旅行 Time Limit: 14000/7000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others) Problem De ...
- 2018CCPC-女生专场
(咕咕咕,咕了快一年的bu题.. A.CCPC直播 传送:http://acm.hdu.edu.cn/showproblem.php?pid=6297 题意:rt. 分析:模拟. #include&l ...
- "字节跳动杯"2018中国大学生程序设计竞赛-女生专场 Solution
A - 口算训练 题意:询问 $[L, R]$区间内 的所有数的乘积是否是D的倍数 思路:考虑分解质因数 显然,一个数$x > \sqrt{x} 的质因子只有一个$ 那么我们考虑将小于$\sqr ...
- CCPC-WFinal-女生专场
1001:CCPC直播 字符串处理,几个if语句 1002:口算训练 前缀和处理<=根号n的因数,大于根号n的因数每个数至多有一个,用vector存下每个大因数的位置,map离散化.查询 ...
- 跨界玩AR,迪奥、Hugo Boss等知名奢侈品牌将制造AR眼镜
Snapchat因为阅后即焚消息应用而被人所熟知,前段时间这家公司拓展主要业务,未来将不再只有消息应用,还有款名为"Spectacles"的AR太阳镜.内置了一个摄像头,戴上之后即 ...
- BZOJ 3531: [Sdoi2014]旅行 [树链剖分]
3531: [Sdoi2014]旅行 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1685 Solved: 751[Submit][Status] ...
- vijos P1780 【NOIP2012】 开车旅行
描述 小\(A\)和小\(B\)决定利用假期外出旅行,他们将想去的城市从\(1\)到\(N\)编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市\(i\)的海拔高度为 ...
随机推荐
- bzoj2431逆序对数列——递推
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2431 考虑新加入一个数i,根据放的位置不同,可以产生0~i-1个新逆序对: 所以f[i][j ...
- registerWithTouchDispatcher 注册单点触摸事件
Doc: If isTouchEnabled, this method is called onEnter. Override it to change the way CCLayer receive ...
- PostgreSQ 连接问题 FATAL: no pg_hba.conf entry for host
PostgreSQ数据库为了安全,它不会监听除本地以外的所有连接请求,当用户通过JDBC访问是,会报一些如下的异常: org.postgresql.util.PSQLException: FATAL: ...
- qq截图原理
屏幕截图实现的大体思想是:发起截图时,将当前窗口的图像保存到内存中,然后弹出一个置顶的全屏窗口,将保存的桌面图片绘制到这个全屏窗口上:初始时绘制的是灰化的桌面图像,选择截图区域后,则将选中的区域绘制成 ...
- B. Mishka and trip
time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...
- POJ2063【完全背包】
题意: 给一个初始的钱,年数, 然后给出每个物品的购买价格 与 每年获得的利益, 求在给出的年份后手上有多少钱. 思路: 背包重量还是资金. dp[0]=初始资金: 重物的重量是他的价格,获利是价值. ...
- bzoj 4903: [Ctsc2017]吉夫特【lucas+状压dp】
首先根据lucas, \[ C_n^m\%2=C_{n\%2}^{m\%2}*C_{n/2}^{m/2} \] 让这个式子的结果为计数的情况只有n&m==m,因为m的每一个为1的二进制位都需要 ...
- bzoj 1176 [Balkan2007]Mokia 【CDQ分治】
W过大,很难在线维护,考虑离线算法 给每个操作加一个时间属性n,显然,对于n=i的询问,对它有影响的修改只在n<i中,所以可以CDQ(因为是按时间序读进来的,所以不用排序了 对于统计矩形和,可以 ...
- Cloudera Manager是啥?主要是干啥的?
简单来说,Cloudera Manager是一个拥有集群自动化安装.中心化管理.集群监控.报警功能的一个工具(软件),使得安装集群从几天的时间缩短在几个小时内,运维人员从数十人降低到几人以内,极大的提 ...
- DP HDOJ 5492 Find a path
题目传送门 题意:从(1, 1)走到(n, m),每次往右或往下走,问(N+M−1)∑(Ai−Aavg)2 的最小值 分析:展开式子得到(N+M−1)∑(Ai2) - (∑(Ai))2的最小值.用普通 ...