dij算法堆优化_BZOJ 3040 最短路(road) 堆优化Dijkstra | 学步园
题目大意:最短路。
思路:最短路。
贴一份比较高效的堆优化Dij模板吧。
CODE:
#include
#include
#include
#include
#define _MAX 1000010
#define MAX 10000010
using namespace std;
#define min(a,b) ((a) < (b) ? a:b)
long long f[_MAX];
struct Heap{
int num[_MAX],pos[_MAX],size;
void PushUp(int p) {
while(p > 1) {
if(f[num[p]] < f[num[p >> 1]]) {
swap(num[p],num[p >> 1]);
swap(pos[num[p]],pos[num[p >> 1]]);
p >>= 1;
}
elsebreak;
}
}
void Insert(long long x) {
num[++size] = x;
pos[x] = size;
PushUp(size);
}
void Pop() {
pos[num[1]] = 0;
num[1] = num[size--];
if(size)pos[num[1]] = 1;
int now = 2;
while(now < size) {
if(f[num[now + 1]] < f[num[now]])
++now;
if(f[num[now]] < f[num[now >> 1]]) {
swap(num[now],num[now >> 1]);
swap(pos[num[now]],pos[num[now >> 1]]);
now <<= 1;
}
elsebreak;
}
}
}heap;
int points,edges;
long long T,rxa,rxc,rya,ryc,rp;
int head[_MAX],total;
int next[MAX],aim[MAX],length[MAX];
inline void Add(int x,int y,int len)
{
next[++total] = head[x];
aim[total] = y;
length[total] = len;
head[x] = total;
}
void Dijkstra()
{
memset(f,0x3f,sizeof(f));
f[1] = 0;
for(int i = 1; i <= points; ++i)
heap.Insert(i);
while(heap.size) {
int x = heap.num[1]; heap.Pop();
for(int i = head[x]; i; i = next[i])
if(f[aim[i]] > f[x] + length[i])
f[aim[i]] = f[x] + length[i],heap.PushUp(heap.pos[aim[i]]);
}
}
int main()
{
cin >> points >> edges;
cin >> T >> rxa >> rxc >> rya >> ryc >> rp;
int x = 0,y = 0,z = 0;
int a,b;
for(int i = 1; i <= T; ++i) {
x = ((long long)x * rxa + rxc) % rp;
y = ((long long)y * rxa + rxc) % rp;
a = min(x % points + 1,y % points + 1);
b = y % points + 1;
if(a != b)Add(a,b,1e8 - 100 * a);
}
for(int i = T + 1; i <= edges; ++i) {
scanf("%d%d%d",&x,&y,&z);
Add(x,y,z);
}
Dijkstra();
cout << f[points] << endl;
return 0;
}
dij算法堆优化_BZOJ 3040 最短路(road) 堆优化Dijkstra | 学步园相关推荐
- bzoj 3040: 最短路(road)(堆优化dijkstra)
3040: 最短路(road) Time Limit: 60 Sec Memory Limit: 200 MB Submit: 2811 Solved: 933 [Submit][Status][ ...
- 图论:dij算法优化:双端队列及详细证明
dij原来的写法请移步这里 首先,让我们举一个洛谷中的情境 这题中,我们可以二分mid答案,小于等于mid的边权是0,大于的是1,再计算最短路是否<=k: 那么在这样边权只有0和1的时候,dij ...
- 【PSO运输优化】基于MATLAB的PSO运输优化算法的仿真
1.软件版本 matlab2013b 2.本算法理论知识 问题是,假设我有一个收集轨道,上面有5个采集堆,这5个采集堆分别被看作一个4*20的矩阵(下面只有4*10),每个模块(比如:A31和A32的 ...
- dij算法为什么不能处理负权,以及dij算法变种
对于上面那张图,是可以用dij算法求解出正确答案,但那只是巧合而已. 我们再看看下面这张图. dist[4] 是不会被正确计算的. 因为dij算法认为从队列出来的点,(假设为u)肯定是已经求出最短路的 ...
- 【蓝桥杯 路径 python】Dij算法
题目来源: P1553 - [蓝桥杯2021初赛] 路径 - New Online Judge (ecustacm.cn) 经过两天的学习总算搞定了python的Dij算法,不得不说python的库函 ...
- DL之NN:NN算法(本地数据集50000张训练集图片)进阶优化之三种参数改进,进一步提高手写数字图片识别的准确率
DL之NN:NN算法(本地数据集50000张训练集图片)进阶优化之三种参数改进,进一步提高手写数字图片识别的准确率 导读 上一篇文章,比较了三种算法实现对手写数字识别,其中,SVM和神经网络算法表现非 ...
- 推荐算法炼丹笔记:科学调参在模型优化中的意义
作者:九羽 ,公众号:炼丹笔记 基于Embedding的推荐算法模型一直是近几年研究的热门,在各大国际会议期刊都能看到来自工业界研究与实践的成果.MF(Matrix Factorization)作为传 ...
- 一步步优化JVM四:决定Java堆的大小以及内存占用
到目前为止,还没有做明确的优化工作.只是做了初始化选择工作,比如说:JVM部署模型.JVM运行环境.收集哪些垃圾回收器的信息以及需要遵守垃圾回收原则.这一步将介绍如何评估应用需要的内存大小以及Java ...
- 【微电网优化】基于粒子群算法求解热电联供型微电网经济运行优化问题含Matlab源码
1 简介 面对全球环境污染和能源危机的双重压力,世界各国将焦点转向太阳能.风能等清洁可再生能源.微电网是组织和利用可再生能源发电的重要途径之一.本文以微电网的能量优化调度为研究对象,建立了微电网能量优 ...
最新文章
- iOS手势操作简介(四)
- 2015年的Java –重大事件
- css 图片自适应_img图片自适应object-fit
- LeetCode 38. Count and Say
- 现在这个时代变了,区块链,数字货币才是最火的项目
- 用好这个数据分析工具,BI平台建设少费一半力
- UGUI自定义组件之Image根据Text大小自动调整
- JQuery简要介绍(转)
- 证据理论(2)—— 多种合成公式
- 我爱淘冲刺阶段站立会议2每天任务4
- 企业邮箱是什么?企业邮箱有什么好处?企业邮箱域名怎么设置?
- apicloud访问mysql_APICloud db组件
- 守法公民 Law Abiding Citizen (2009)
- Apache的性能解读
- 如何在Windows上下载java
- @kubernetes(k8s)pod服务探针(健康检查)及回调钩子HOOK详解
- phonegap 安装及环境配置(简介)
- 微软拼音输入法繁体转简体
- Force DAO 任意铸币攻击事件复盘分析 | 零时科技
- AI 自动研发机器学习系统,DeepMind 让算法学习强化学习
热门文章
- 逻辑回归与线性回归的区别
- LeetCode-226. 翻转二叉树
- CSDN博客如何复制别人的文章到自己的博客(很详细,看着图片傻瓜式操作)
- 【idea配置】电脑死机重启后idea报错cannot load project:com.intellij.ide
- PHP PDO连接PostgreSQL报错 SCRAM authentication requires libpq version 10 or above in解决
- git提交时发现iml文件没有被排除
- 自定义filter中配置不被过滤的资源
- java行转列_Java后端面试标准:如何准备一场后端面试?
- java开发汉字显示不全_求java转码ISO-8859-1转UTF-8汉字显示不全补救方案?
- 11_python基础—函数(引用、全局、局部变量)