BZOJ-3040 最短路
最短路+堆优化。
普通的堆还不行,自己用的是配对堆(貌似斐波那契堆也行?毕竟理论复杂度)
然后发现自己的配对堆比云神的不知快了多少。。。我照着他的模版打的喂。。
然后发现前T条边不理都能A。。。
数据啊数据233
#include <cctype>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <iostream>
#define rep(i, l, r) for(int i=l; i<=r; i++)
#define clr(x, c) memset(x, c, sizeof(x))
#define travel(x) for(edge *p=fir[x]; p; p=p->n)
#define ll long long
#define maxn 1000009
#define maxm 10000009
using namespace std;
const ll inf=(ll)(0x7fffffff)*(ll)(0x7fffffff);
inline ll read()
{
ll x=0; char ch=getchar();
while (!isdigit(ch)) ch=getchar();
while (isdigit(ch)) x=x*10+ch-'0', ch=getchar();
return x;
}
struct edge{int y, z; edge *n;} e[maxm], *fir[maxn], *pt=e;
inline void Add(ll x, ll y, ll z){pt->y=y, pt->z=z, pt->n=fir[x], fir[x]=pt++;}
struct node{int l, r, ch; node(){l=r=ch;}} h[maxn]; int n, m;
ll d[maxn]; bool f[maxn]; int roof=0;
int join(int v, int u)
{
if (d[v]<d[u]) swap(v, u);
h[v].l=u, h[v].r=h[u].ch, h[h[u].ch].l=v;
h[u].ch=v;
return u;
}
void push(int v){if (!roof) roof=v; else roof=join(roof, v);}
void update(int v)
{
if (v!=roof)
{
if (h[h[v].l].ch==v)
h[h[v].l].ch=h[v].r;
else
h[h[v].l].r=h[v].r;
if (h[v].r) h[h[v].r].l=h[v].l;
h[v].l=h[v].r=0;
roof=join(roof, v);
}
}
int st[maxn], top;
void pop()
{
if (!h[roof].ch) roof=0; else
{
top=0; int t=h[roof].ch;
while (t) if (h[t].r)
{
int k=h[h[t].r].r;
int v=h[t].r;
h[t].l=h[t].r=h[v].l=h[v].r=0;
st[++top]=join(t, v);
t=k;
}
else
{
st[++top]=t; h[t].l=h[t].r=0; break;
}
roof=st[top];
rep(i, 1, top-1) roof=join(roof, st[i]);
}
} void Dijstra()
{
clr(f, 0); d[1]=0; rep(i, 2, n) d[i]=inf; push(1); f[1]=true;
rep(i, 1, n)
{
int x=roof; pop(); f[x]=0;
if (x==n) break;
travel(x) if (d[p->y]>d[x]+(ll)(p->z))
{
d[p->y]=d[x]+(ll)(p->z);
if (!f[p->y]) push(p->y), f[p->y]=1; else update(p->y);
}
}
}
int main()
{
n=read(), m=read();
ll t=read(), rxa=read(), rxc=read(), rya=read(), ryc=read(), rp=read(), x, y, a, b;
/* rep(i, 1, t)
{
x=(x*rxa+rxc)%rp;
y=(y*rya+ryc)%rp;
a=min(x%n+1, y%n+1);
b=max(y%n+1, y%n+1);
Add(a, b, 1e8-100*a);
} */
rep(i, 1, m-t){x=read(), y=read(); Add(x, y, read());}
Dijstra();
printf("%lld\n", d[n]);
return 0;
}
BZOJ-3040 最短路的更多相关文章
- BZOJ 3040: 最短路(road) ( 最短路 )
本来想学一下配对堆的...结果学着学着就偏了... 之前 kpm 写过这道题 , 前面的边不理它都能 AC .. 我也懒得去写前面的加边了... 用 C++ pb_ds 库里的 pairing_hea ...
- BZOJ 3040: 最短路(road) [Dijkstra + pb_ds]
3040: 最短路(road) Time Limit: 60 Sec Memory Limit: 200 MBSubmit: 2476 Solved: 814[Submit][Status][Di ...
- BZOJ 3040 最短路 (堆优化dijkstra)
这题不是裸的最短路么?但是一看数据范围就傻了.点数10^6,边数10^7.这个spfa就别想了(本来spfa就是相当不靠谱的玩意),看来是要用堆优化dijkstra了.但是,平时写dijkstra时为 ...
- BZOJ 3040最短路
题目描述 给定一个 NN 个点, MM 条有向边的带权图,请你计算从 SS 出发,到每个点的距离. 数据保证你能从 SS 出发到任意点. 输入输出格式 输入格式: 第一行两个整数 NN . MM ,表 ...
- Bzoj 3694: 最短路 树链剖分
3694: 最短路 Time Limit: 5 Sec Memory Limit: 256 MBSubmit: 67 Solved: 34[Submit][Status][Discuss] Des ...
- 【刷题】BZOJ 2125 最短路
Description 给一个N个点M条边的连通无向图,满足每条边最多属于一个环,有Q组询问,每次询问两点之间的最短路径. Input 输入的第一行包含三个整数,分别表示N和M和Q 下接M行,每行三个 ...
- BZOJ 2125: 最短路
2125: 最短路 Time Limit: 1 Sec Memory Limit: 259 MBSubmit: 756 Solved: 331[Submit][Status][Discuss] D ...
- BZOJ.2125.最短路(仙人掌 最短路Dijkstra)
题目链接 多次询问求仙人掌上两点间的最短路径. 如果是在树上,那么求LCA就可以了. 先做着,看看能不能把它弄成树. 把仙人掌看作一个图(实际上就是),求一遍根节点到每个点的最短路dis[i]. 对于 ...
- bzoj 1880 最短路
我们首先知道,答案肯定是最短路图中的某段公共链,那么设(x,y)为x到y的最短路,那么答案为((s1,t1)+(s2,t2)-min((s1,s2)+(t1,t2),(s1,t2),(s2,t1))) ...
- bzoj 2125 最短路——仙人掌两点间最短路
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2125 因为看了TJ又抄了标程,现在感觉还是轻飘飘的……必须再做一遍. 两点间的情况: 1.直 ...
随机推荐
- 在CesiumVR基础上实现3D左右立体视觉
整体思路 在VR模块的基础上调整视差,使其随距离发生变化: 左右分屏时,需要将左右屏的横向进行1/2压缩:这是因为3D-TV在对左右格式影像进行合并时,会进行拉伸: 左屏幕的相机相对于原来的(右屏)相 ...
- CF Gym 100637K Microcircuits (DP)
题意:给你n个点,将这些点放在一个环上,问你不相交的连k条线的方案数.(没有重点) 题解:dp[i][j]表示i个点连j条线的方案数,那么新加一个点i, 情况1,i没有和之前的点相连,方案数为dp[i ...
- Adobe登陆出现Access denied解决方法
当我安装好Adobe Acrobat Reader DC时,想要登陆Adobe账号时被Access denied. 一般说需要梯子,然而本人亲测这种方法不行(香港主机,全局模式下). 一个简单有效的方 ...
- 常用的CSS居中方式
1.水平居中margin 0 auto;(浮动元素除外) 这个属性在网页制作的过程中是经常被用到的,一般情况下页面的版心你就可以看到它. <style> .father { width: ...
- 使用objection来模块化开发iOS项目
转自无网不剩的博客 objection 是一个轻量级的依赖注入框架,受Guice的启发,Google Wallet 也是使用的该项目.「依赖注入」是面向对象编程的一种设计模式,用来减少代码之间的耦合度 ...
- 转 Keras 保存与加载网络模型
https://blog.csdn.net/qq_28413479/article/details/77367665
- 【dp】石子归并
玄学NPC 题目描述 有一堆石头质量分别为W1,W2,…,Wn.(Wi≤10000),将石头合并为两堆,使两堆质量的差最小. 输入 输入第一行只有一个整数n(1≤n≤50),表示有n堆石子.接下去的n ...
- IntelliJ IDEA 配置 Tomcat 运行web项目
运行前提: 配置好 Java 的运行环境 配置好 Tomcat 安装 IntelliJ IDEA 开始 1.创建项目并配置 关于配置SDK,等建完项目再说 没有配置SDK的话 会出现下面的弹框,点击 ...
- 【php】【特殊案例】数组调用方法
As of PHP 5.4.0, you can call any callable stored in a variable. <?php class Foo { static functio ...
- jsp常用动作
jsp:include 动态包含: jsp:forward 转发: jsp:useBean 实例化bean对象: jsp:setProperty 设置一个属性值 jsp:getProperty 获取一 ...