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.直 ...
随机推荐
- 【转载】Cesium基础使用介绍
既然给我发了参与方式,不参加似乎有点不给人面子,反正也没多少人看我的博客,那我就试试吧,也欢迎大家自己参与:2017年度全网原创IT博主评选活动投票:http://www.itbang.me/goVo ...
- python面试笔试题汇总
Python面试攻略(嗨谈篇) 110道python面试笔试题汇总,你能答对几道? Python 面试问答 Top 25 2018 年最常见的 Python 面试题 & 答案
- python_90_hashlib模块
#用于加密相关的操作,3.x里代替了2.x中的md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 import hashlib ...
- 简单的邮件发送mail.jar
public class MailSender { final static Logger logger = Logger.getLogger(MailSender.class); /** * 发送简 ...
- 作业题:输出单个字符 输入单个字符 scanf printf
输出单个字符用putchar() #include <iostream> using namespace std; int main(){ char x='B'; char y='O'; ...
- 119. Pascal's Triangle II@python
Given a non-negative index k where k ≤ 33, return the kth index row of the Pascal's triangle. Note t ...
- pandas处理大文本数据
当数据文件是百万级数据时,设置chunksize来分批次处理数据 案例:美国总统竞选时的数据分析 读取数据 import numpy as np import pandas as pdfrom pan ...
- Windows7设置局域网文件共享
首先要实现共享必须设置共享的机器与访问共享的机器在同一个工作组中. 右键桌面上的计算机图标=>属性 如果不一样的话,就需要点击[更改设置] 右键要共享的文件或者文件夹,点击[共享]打开共享标签: ...
- (75)zabbix_server.conf配置文件详解
############ GENERAL PARAMETERS ################# ### Option: ListenPort# Listen port for trapper.# ...
- day2-python 登录
# username = 'niuhanyang' # 写一个判断登录的程序: # 输入: username # password # 最大错误次数是3次,输入3次都没有登录成功,提示错误次数达到上限 ...