最短路算法的复杂度考虑

书上已经做了优化,用的是优先队列;用优先队列实现堆优化

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 奢侈的旅行的更多相关文章

  1. hdu6290奢侈的旅行

    高玩小Q不仅喜欢玩寻宝游戏,还喜欢一款升级养成类游戏.在这个游戏的世界地图中一共有n个城镇,编号依次为1到n. 这些城镇之间有m条单向道路,第i 条单项道路包含四个参数ui,vi,ai,bi,表示一条 ...

  2. HDU-6290 奢侈的旅行 (Dijkstra+堆优化)

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

  3. HDU-6290_奢侈的旅行(Dijstra+堆优化)

    奢侈的旅行 Time Limit: 14000/7000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others) Problem De ...

  4. 2018CCPC-女生专场

    (咕咕咕,咕了快一年的bu题.. A.CCPC直播 传送:http://acm.hdu.edu.cn/showproblem.php?pid=6297 题意:rt. 分析:模拟. #include&l ...

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

    A - 口算训练 题意:询问 $[L, R]$区间内 的所有数的乘积是否是D的倍数 思路:考虑分解质因数 显然,一个数$x > \sqrt{x} 的质因子只有一个$ 那么我们考虑将小于$\sqr ...

  6. CCPC-WFinal-女生专场

    1001:CCPC直播   字符串处理,几个if语句 1002:口算训练   前缀和处理<=根号n的因数,大于根号n的因数每个数至多有一个,用vector存下每个大因数的位置,map离散化.查询 ...

  7. 跨界玩AR,迪奥、Hugo Boss等知名奢侈品牌将制造AR眼镜

    Snapchat因为阅后即焚消息应用而被人所熟知,前段时间这家公司拓展主要业务,未来将不再只有消息应用,还有款名为"Spectacles"的AR太阳镜.内置了一个摄像头,戴上之后即 ...

  8. BZOJ 3531: [Sdoi2014]旅行 [树链剖分]

    3531: [Sdoi2014]旅行 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1685  Solved: 751[Submit][Status] ...

  9. vijos P1780 【NOIP2012】 开车旅行

    描述 小\(A\)和小\(B\)决定利用假期外出旅行,他们将想去的城市从\(1\)到\(N\)编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市\(i\)的海拔高度为 ...

随机推荐

  1. iphone 在设置了initial-scale=1 之后,在设置滚动条之后,没有滑动效果的解决办法

    iphone在设置了initial-scale=1 之后,我们终于可以以1:1 的比例进行页面设计了. 关于viewport,还有一个很重要的概念是:iphone 的safari 浏览器完全没有滚动条 ...

  2. ADC 与实际电压值的关系

    1.首先确定ADC用几位表示,最大数值是多少.比如一个8位的ADC,最大值是0xFF,就是255. 2.然后确定最大值时对应的参考电压值.一般而言最大值对应3.3V.这个你需要看这个芯片ADC模块的说 ...

  3. 最优配餐_暴力bfs

    问题描述 栋栋最近开了一家餐饮连锁店,提供外卖服务.随着连锁店越来越多,怎么合理的给客户送餐成为了一个急需解决的问题. 栋栋的连锁店所在的区域可以看成是一个n×n的方格图(如下图所示),方格的格点上的 ...

  4. 020--python函数基础知识考试(包括:函数_递归等知识)

    1.列举布尔值为 False 的值 空,None,0, False, '', [], {}, () 2.写函数: 根据范围获取其中 3 和 7 整除的所有数的和,并返回调用者:符合条件的数字个数以及符 ...

  5. CentOS Linux自动备份MySQL数据库到远程FTP服务器并删除指定日期前的备份Shell脚本

    说明: 我这里要把MySQL数据库存放目录/var/lib/mysql下面的pw85数据库备份到/home/mysql_data里面,并且保存为mysqldata_bak_2011_11_03.tar ...

  6. emacs版本差异(转载)

    emacs23 就是原装的,由 gnu 发布的 emacs.emacs-lucid 是由 ubuntu 调整过的.emacs-nox 是不带 x system 的 emacs 版本.除非只在终端下用, ...

  7. iOS Button选中与取消

    /** * 是否点击 */ @property (nonatomic ,assign) BOOL selected; /** *  button 点击事件选中取消选中 */ - (void)handl ...

  8. hdoj5387【模拟】

    题意: 略: 思路: 把所有的角度按照分母的形式写,中间不要约,不要除...(然后我就wa了),本来是想保证结果的正确性,最后会造成约好以后分子很大..>360°: /* 这个案例不错,妈的,随 ...

  9. bzoj4145 [AMPPZ2014]The Prices(状压dp)

    Description 你要购买m种物品各一件,一共有n家商店,你到第i家商店的路费为d[i],在第i家商店购买第j种物品的费用为c[i][j], 求最小总费用. Input 第一行包含两个正整数n, ...

  10. Springboot的yml文件

    spring: datasource: # 数据库四大组件 schema-password: root data-username: root driver-class-name: com.mysql ...