
最短路
largecub233
这个作者很懒,什么都没留下…
展开
-
spfa-洛谷P1073 最优贸易
https://daniu.luogu.org/problem/show?pid=1073#sub 显然这道题目你只要找到任何路径上的最大值,最小值就好了; 那么对于点k 我们要知道1~k里面的最小值卖入; 还要知道k~里面的最大值卖出; 那么我们可以用spfa去求; 第一遍跑出min数组后去反向图跑max数组; 这样就好了; 这道题目用缩点进行dp也可以;#include<iost原创 2017-04-01 11:29:21 · 890 阅读 · 0 评论 -
spfa负环 P2868
https://daniu.luogu.org/problem/show?pid=2868 spfa这个常见的算法其实理解的深不深刻,好的题目可以反映出来; 这道题目我们就是在一个有向图里面找环; 这个环的 节点值和/边值和 要求经可能大 那么可以理解为 对于每一个环有一个 节点值和/边值和(设为w) 我们要让某一个环的w>ans(其实应该是>=,但是足够精度下差不多) 求ans的最原创 2017-09-30 11:08:37 · 470 阅读 · 0 评论 -
洛谷 P3106 [USACO14OPEN]GPS的决斗Dueling GPS's
https://daniu.luogu.org/problem/show?pid=3106 这道题目的算法没什么好讲的,洛谷的题解讲的还是很详细的; 但是大佬的写法让我好生向往#include<bits/stdc++.h>#define Ll long longusing namespace std;const int N=1e4+5;struct cs{int y,v;};vecto原创 2017-10-06 20:18:34 · 517 阅读 · 0 评论 -
c++优先队列,小根堆
一直对priority不会,现在要记一下了priority_queue<int,vector<int>,greater<int> >q;这样的话,我们可以得到一个小根堆; 意思大概是<类型,<存储方式>,<比较函数> >; 但是这个小根堆只能支持int; 反正我不会啦;struct cs{ int x; bool operator < (const cs &rhs) const原创 2017-06-16 09:33:31 · 19098 阅读 · 2 评论 -
spfa的2种优化——洛谷P3003 [USACO10DEC]苹果交货Apple Delivery
https://daniu.luogu.org/problem/show?pid=3003 SLF:Small Label First 策略,设要加入的节点是j,队首元素为i,若dist(j) <= dist(i),则将j插入队首,否则插入队尾。 LLL:Large Label Last 策略,设队首元素为i,每次弹出时进行判断,队列中所有dist值的平均值为x,若dist(i)>x则将原创 2017-08-21 21:22:29 · 494 阅读 · 0 评论 -
spfa——洛谷P1608 路径统计
https://www.luogu.org/problem/show?pid=1608#sub spfa最短路计数; 我们在spfa里面修改就好了; 我们增加一个cnt数组,表示到达这个点的最短路总方案; 但是这样的话在传递方面有问题; 我们怎么办呢; 对于一个点x; 我们枚举另一个点k;if(d[x]+g[x][k]==d[k])cnt[k]+=cnt[x]; if(d[x]原创 2017-07-08 10:34:08 · 1121 阅读 · 0 评论 -
差分约束——洛谷 P1645 序列
https://www.luogu.org/problem/show?pid=1645 基本上就是差分约束spfa的模版题; 我们搞一个a[] 如果序列里有i那么a[i]=1; s[i]就是a[i]的前缀和; 那么 s[i]-s[i-1]>=0 s[i-1]-s[i]>=-1 对于读入的x,y,z; s[y]-s[x-1]>=z 所以我们把i到i-1连-1的边 i-1到i连0的原创 2017-06-30 14:26:24 · 1251 阅读 · 0 评论 -
spfa裂点——洛谷P1266 速度限制
https://www.luogu.org/problem/show?pid=1266 我靠直接裂点; 就是d[i][j]表示在速度为j的时候到i最短时间; 相对的g[i][j][2]就记录方案; 这样大力裂点跑spfa就好了; 这样的话,原来的queue里面要存两个值; 一个是点,一个是速度; 但是我懒,仅仅存了点; 然后在spfa的时候枚举速度; 虽然满了一点,还是过了;#in原创 2017-06-02 15:28:23 · 640 阅读 · 0 评论 -
最短路——洛谷P1027 Car的旅行路线
https://www.luogu.org/problem/show?pid=1027 预处理完就floyd就好了; 首先是三个点求第四个点; 因为三个点会形成一个直角三角形; 找到最长的边,就是斜边; 斜边取中点,然后把那个直角的点对称过去就好了; 然后算距离嘛 随后AB的机场4*4比较一下就好了#include<iostream>#include<cstdio>#include原创 2017-05-15 11:09:24 · 539 阅读 · 0 评论 -
spfa找负环——vijos1053Easy sssp
https://vijos.org/p/1053 spfa找负环; 原则是一个点进队出队n次就可以算负环; 因为一个点最多直接间接被n-1个点更新; 但是这一题这样只会对一半的数据; 为什么? 为什么? 因为负环最大1e9; 1e9*n爆int; 所以要开Ll#include<cstdio>#include<iostream>#include<cstring>#include原创 2017-05-11 15:00:17 · 559 阅读 · 0 评论 -
spfa——vijos1089小胖抗日
https://vijos.org/p/1089 就是spfa啦啦啦; 在跑spfa的时候判断一下就好啦;#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cstdlib>#define Ll long longusing namespace std;struct cs{in原创 2017-05-02 11:23:27 · 388 阅读 · 0 评论 -
floyd——洛谷P1119 灾后重建
https://daniu.luogu.org/problem/show?pid=1119 我靠!!!!我连floyd都忘拉; 考考空空旷旷坎坎坷坷!!!! 我们floyd不是要枚举k,i,j; 对于这个k,我们仅仅是用k去跟新其他边; 这个k是存在的; 换句话说,f[x][k]这个值在k被枚举到之前就是会不断更新的; 我一开始以为k是消失的,枚举到k的时候会产生一个k; 我靠,这个原创 2017-04-17 15:54:55 · 660 阅读 · 0 评论 -
最短路——洛谷P2296 寻找道路
https://www.luogu.org/problem/show?pid=2296 先建反图,从终点开始跑bfs,得出所有可以到终点的点; 然后在正图里面跑最短路就好了; 堆优化和spfa都有;#include <iostream>#include <string>#include <cstdio>#include <cstring>#include<algorithm>#inc原创 2017-04-17 13:56:25 · 352 阅读 · 0 评论 -
noip2017 逛公园
https://www.luogu.org/problemnew/show/3953 唉,我是真的菜; 这道题目傻的要死,自己思考的时候好像思维被限制住了一样的; 先看0边的影响,那么-1的情况就是很明显的; 当一条合法路径上的一个点是0环上的点,那么显然我们可以走这个0环无数次得到无数解; 那我们直接把0环找出来,然后对于环上的每一个点x 判断一下 通过1到n 通过x的最短路是否满足<原创 2017-11-23 23:20:25 · 709 阅读 · 0 评论