最短路
文章平均质量分 61
里阿奴摩西
这个作者很懒,什么都没留下…
展开
-
[K短路 可持久化堆] HDU 5960 Subsequence
建图不难 然后直接上K短路 A*被完虐#include#include#include#include#include#include#define cl(x) memset(x,0,sizeof(x));using namespace std;typedef long long ll;inline char nc(){ static char buf[1000原创 2016-12-21 07:09:55 · 1072 阅读 · 0 评论 -
[删边最短路 并查集||线段树] BZOJ 2725 [Violet 6]故乡的梦 & 4400 tjoi2012 桥
首先求出一条S到T的最短路P,如果不是最短路上的边删了肯定不影响答案。接着证明去掉一条边(u,v)之后最短路一定是这样存在一条边(x,y),然后最短路径是S->x->y->T,并且S->x,y->T都是原图中的最短路。考虑S的最短路径图和T的最短路径图。于是只要考虑一条边(x,y),然后求出S到x的最短路和这条最短路最早什么时候离开P,记作x’,同理求出y’。于是(x,y)这条边可原创 2016-11-04 07:04:50 · 2058 阅读 · 0 评论 -
[最短路 主席树 Hash] Codeforces 464E #265 (Div. 1) E. The Classic Problem
很棒的数据结构练习题 因为边权太大了 我们不能直接储存 我们用主席树! 比较直接从高位到低位找第一个不同的位 可以Hash下 每次加法 我们找到这一位之后第一个0 那么0变为1 0之前一连串1都变成0 这里有个小trick可以不用打标记 我们先建一棵全0的线段树 清0直接找到对应节点接上去就好了#include<cstdio>#include<cstdlib>#include<algo原创 2017-03-17 20:53:14 · 851 阅读 · 0 评论 -
[分治 最短路] BZOJ 4456 [Zjoi2016]旅行者
所有询问离线 把平面分成两块 如果询问两点在同一边 可以不穿过中线 也可以穿过 如果询问两点在不同边 必须穿过 那么我们就可以用中线上所有点更新下 然后递归 卡常数?#include<cstdio>#include<cstdlib>#include<algorithm>#include<vector>#include<queue>using namespace std;ty原创 2017-03-21 23:40:21 · 560 阅读 · 0 评论 -
[快速幂 NTT + 最短路] ICPC 2016 China Final I. Cherry Pick
你有mm种面值的硬币,分别为c1,…,cmc_1,…,c_m,每种有无限张。 你去摘nn个樱桃,每个樱桃都有pp的概率摘下来。 你要要用你的硬币把你摘了的樱桃给买下来,每个樱桃需要11元钱,但是不能找钱。 问最好的情况下你期望要多花多少钱。 答案对10^9+7取模。 n<=1e9,m<=100,ci<=1e4n<=1e9, m<=100, ci<=1e4, 且若i≠ji≠j,有ci∗cj<原创 2017-03-29 08:18:51 · 726 阅读 · 0 评论 -
[最短路 杂题] BZOJ 4356 Ceoi2014 Wall
具体看题解 我说不清楚 首先可以证明 这个环必然包裹住了所有左上角到其他城市的最短路 证明可以调整为包进去 而不会边劣 然后求出所有最短路 然后把它们包进去的话 把一个交点拆成四个点 然后跑一下左上角绕一圈到左上角的最短路#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>#include<que原创 2017-05-06 07:09:18 · 1289 阅读 · 0 评论 -
[最短路 杂题] Codeforces 806D VK Cup 2017 Round 3 D. Perishable Roads
我们把所有边权都减去最小值 然后发现 肯定是一条链然后下面挂着一条0边 然后挂着一整颗子树 子树中贡献都是0 那么我们要最小化那条链 我们发现这条链上如果有连续的权值为 0⋯a,b,c,d⋯且b>c0\cdots a,b,c,d\cdots \text 且 b>c 那么我们把a,ba,b换成一条边答案不会更劣 唯一不行的就是bb就是链头没有边 之后的边必然是递增的 这样就可以做一个最短路了#i原创 2017-05-20 07:20:54 · 731 阅读 · 0 评论 -
[最短路] HDU 5910 Advanced Traffic System
理解了有一会儿,但是题解确实说清楚了关键是只需要更新一遍#include<cstdio>#include<cstdlib>#include<algorithm>#include<vector>#include<queue>#define pb push_backusing namespace std;typedef pair<int,int> abcd;inline char nc()原创 2017-06-28 20:44:11 · 342 阅读 · 0 评论 -
[最短路 虚树+线段树优化建图] BZOJ 4912 [Sdoi2017]天才黑客
sro clrs97老师:”T1特别好写” orz 听说SPFA被卡了 /点蜡这个东西跑最短路,状态肯定不能指记录点,还要记录是哪条边走过来的,那干脆就直接记录边 把边变成点,把点变成连在边之间的边我是把一条边拆成两个点,中间设为边的费用 lcp的费用在点变成的边上,这个东西裸的连,在原图一个点上是O(deg2)O(deg ^2)的肯定炸 那么就建一颗虚树,然后枚举lca,把lca是这原创 2017-06-09 14:51:39 · 1315 阅读 · 0 评论 -
[最短路] 2017 计蒜之道 复赛 D. 百度地图导航
直接最短路就好了 第一次写竟然只拆了一个点 样例输出一坨0 QAQ 没有拿到FB 不开心#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>#include<cmath>#include<queue>#include<vector>#define cl(x) memset(x,0,sizeof(x原创 2017-06-11 07:57:01 · 364 阅读 · 0 评论 -
[最短路 Bfs 二维线段树] JOI Open Contest 2017 Golf
题目大意:给出平面上n个不相交的矩形障碍,以及起点和终点,要求从起点走到终点的折线段段数最少 VIEW PROBLEM - GOLF (JOI17_GOLF)首先最优解肯定可以只在矩形边所在的直线以及过起点终点平行坐标轴的直线上移动 先预处理出矩形边界能够左右上下延伸的最远距离,转化成一些线段,可以扫描线加线段树 然后就直接bfs,关键操作是找出所有跟当前线段相交的且没被走过的线段,可以把线段原创 2017-07-05 07:44:48 · 662 阅读 · 0 评论 -
[删边最短路 并查集] BZOJ 1576 [Usaco2009 Jan]安全路经Travel
hzwer是这么说的首先用dijkstra得出最短路径树然后我的做法是树链剖分+线段树对于一条不在最短路树的有向边(无向可看成两条有向)u-v,长度L,设t=lca(u,v)那么对于t-v的路径上所有点x,都可通过1-t-u-v-x路径长度为d[u]+L+d[v]-d[x]最小化这个长度,也就是最小化d[u]+d[v]+L所以我们原创 2016-11-04 07:01:34 · 617 阅读 · 0 评论 -
[SPFA 分块建图] BZOJ 4070 [Apio2015]雅加达的摩天楼
最坏情况有n^2条边,一般最短路算法都不能过。考虑用分块的思想来优化建图。Pi>sqrt(n),暴力加入每一条边,每次最多sqrt(n)条边。Pi≤sqrt(n),对于每个点添加sqrt(n)个辅助点,一层一层走,边数是O(n*sqrt(n))的。总边数和总点数都是O(n*sqrt(n))。块不能太大 不然爆内存 块最大100#include#include#i原创 2016-05-04 13:40:57 · 692 阅读 · 0 评论 -
[K短路 可持久化堆 最短路径树] JDFZ 2978 第k短路(强)
链接:https://oj.jdfz.com.cn/oldoj/problem.php?id=2978鼎爷的【课件】堆的可持久化和k短路#include#include#include#include#include#include#define cl(x) memset(x,0,sizeof(x));using namespace std;ty原创 2016-12-21 07:06:27 · 949 阅读 · 0 评论 -
[分层图 DP] HihoCoder #1147 时空阵
题解:http://blog.csdn.net/nlj1999/article/details/50413427?locationNum=4由于K于是乎边只能和上一层以及本层的节点相连。注意最后一层必有n 然后剩下的弄成一团 无所谓分不分层 放在n那一层的后面 #include#include#includeusing namespace std;原创 2016-12-19 20:21:07 · 575 阅读 · 0 评论 -
[floyed 增量 离线] BZOJ 1774 [Usaco2009 Dec]Toll 过路费
考虑floyed的过程 每次增加一个中间点k那么我们按权值从小到大加k 然后每次增量后更新答案#include#include#include#includeusing namespace std;typedef pair abcd;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p原创 2016-11-17 07:19:56 · 405 阅读 · 0 评论 -
[分治 floyed] 2016 计蒜之道 复赛 百度地图的实时路况
使用分治,考虑Floyd算法本来就是一个增量的过程。记solve(l,r)表示加入除了l到r之间的点的APSP然后分治时间复杂度O(n^3logn)#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;typedef long long ll;原创 2016-11-09 10:28:51 · 482 阅读 · 0 评论 -
[bfs 分层图 字典序 最短路] BZOJ 2644 Pku3967 Ideal Path
将点按照距离分层,对每一层,计算有效点到下一层的最小颜色值#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(原创 2016-06-29 16:30:08 · 452 阅读 · 0 评论 -
[线段树优化建图最短路 bfs] BZOJ 3073 [Pa2011]Journeys
CA爷的题解:http://blog.csdn.net/CreationAugust/article/details/50739132#include#include#include#includeusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1=原创 2016-05-08 12:41:53 · 1108 阅读 · 0 评论 -
[最短路] BZOJ 4239 巴士走读
暴力最短路#include#include#include#includeusing namespace std;typedef long long ll;typedef pair abcd;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fr原创 2016-06-06 07:42:27 · 911 阅读 · 0 评论 -
[倍增 floyd] BZOJ 2165 大楼
倍增喽try-catch 语句 真是涨姿势 还可以这么用#include#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+原创 2016-03-15 18:40:30 · 693 阅读 · 0 评论 -
[SPFA] BZOJ 2622 [2012国家集训队测试]深入虎穴 & BZOJ 2617 [Ioi2011]crocodile
题解:http://blog.csdn.net/wzq_QwQ/article/details/47997617其实总体东西就是个SPFA,不过这里面我们需要做一些改动。这只老虎是DP老虎,他每次会占据你的最优方案。所以使得你只能用次优方案来更新最优方案以及次优方案。这就是SPFA的路子。但是这个路子并不够。让我们考虑一个点只有一个儿子的时候。他可能会扫一圈后第一次原创 2016-04-13 10:49:23 · 1017 阅读 · 0 评论 -
[A* K短路 || 可持久化堆] POJ 2449 Remmarguts' Date
这就是裸的k短路了 学习一发A*的姿势:http://yzmduncan.iteye.com/blog/1162759这个S==T的坑要注意#include#include#include#include#include#define V G[p].vusing namespace std;inline char nc(){ static char buf[原创 2016-05-02 21:12:45 · 577 阅读 · 0 评论 -
[最短路 主席树 Hash] 51Nod 算法马拉松26 E Travel
跟这个题一毛一样,那个题还高明一点,还会进位#include<cstdio>#include<cstdlib>#include<algorithm>#include<queue>#include<map>using namespace std;typedef unsigned int uint;typedef unsigned long long ull;inline char nc(原创 2017-07-05 19:02:37 · 505 阅读 · 0 评论