最短路
L_0_Forever_LF
一个热爱OI的OIer
展开
-
BZOJ 2788: [Poi2012]Festival
差分约束,对于Xa+1=Xb这样的限制连正向反向两条边限制 跑一次Floyd,有负环则无解 然后强联通缩点,不同联通分量答案互不影响,对于一个联通分量,他的答案数是最远点对之间的最短距离+1,然后加起来code:#include<set>#include<map>#include<deque>#include<queue>#include<stack>#include<cmath>#原创 2017-02-18 10:24:53 · 445 阅读 · 0 评论 -
BZOJ2330: [SCOI2011]糖果
发现自己学了假的差分约束qaq 有几种关系 x=y/x>y/x>=yx=y/x>y/x>=y 分别对应x>=y,x=y/x−1>=y/x>=yx>=y,x=y/x>=y所有关系都是形如x+c>=yx+c>=y的形式,要求总数最小,可以把关系变成x>=y−cx>=y-c的形式,把x,y看成到x,y的最长路,发现就是一条y连向x,权为−c-c的边,此时因为对于每个x,取得值是满足所有不等式x原创 2018-01-23 17:18:41 · 321 阅读 · 0 评论 -
BZOJ4070: [Apio2015]雅加达的摩天楼
没判重点一直炸qwq这题看起来就很最短路 但是直接建边明显不行 注意到当p>n√\sqrt n时边数是n√\sqrt n的,总边数nn√n\sqrt n 当p<n√\sqrt n时,可以发现对于p相同,mod p下相同的两个 点我们会建重复很多边 具体来说,如果有x< y,px=py, x%p=y%p,那么x连到y右边的j边可以通过x->y->j,x只需要连到y就好了 那么这样的总边数是原创 2017-12-06 20:34:33 · 423 阅读 · 0 评论 -
BZOJ3205: [Apio2013]机器人
卡常卡了好久qwq可以先用记忆化搜索搜出每个位置往四个方向走会走到哪,注意判走到已经走过的地方避免死循环 f[l][r][i][j]表示在(i,j)合成机器人l~r的最小花费 有 f[l][r][i][j]=min f[l][r][di][dj]+1 (di,dj)->(i,j) f[l][r][i][j]=min(f[l][k][i][j]+f[k+1][j][i][j]) 对于第二个转原创 2017-12-06 12:18:44 · 499 阅读 · 0 评论 -
BZOJ1139: [POI2009]Wie
分成2^p层跑最短路…code:#include<set>#include<map>#include<deque>#include<queue>#include<stack>#include<cmath>#include<ctime>#include<bitset>#include<string>#include<vector>#include<cstdio>#include<原创 2017-12-11 18:46:07 · 345 阅读 · 0 评论 -
BZOJ4383: [POI2015]Pustynia
是个很裸的差分约束? 如果有限制x>y 可以连一条边x->y,-1 代表y<=x-1 即 x>y注意到k个数把区间划分成了k个区间,对于每个限制,新建一个点,k个特殊的数向其连边-1,它向k个区间连边0 线段树优化建图 建好图后如果不是DAG说明有负环,无解 否则是个DAG,令f[x]表示x最大能取到的值,dp f值 如果一个固定了值的位置,他的f值< 它的值,也无解code:#inc原创 2017-10-01 11:51:13 · 489 阅读 · 0 评论 -
codeforces 553E - Kyoya and Train
一个有向图,走每条边有个代价,且花费的时间从1~T有个概率p[e][i],从1到n,若到达时时间超过T,则需要额外X的花费,问期望最小花费令f[i][j]表示在j时刻从i出发到达n的最小期望,因为虽然每条边花费的时间是不确定的,但至少是1,所以(i,j)这个分层图实际上是一个DAG,就可以dp了对于一条边e:u−>ve:u->v,有 f[u][t]=min(ei+∑Tj=1f[v][t+j]∗p[原创 2017-09-21 12:34:25 · 853 阅读 · 0 评论 -
codeforces 827F. Dirty Arkady's Kitchen
给一个无向图,其中的无向边有一些出现时间,人一开始在1号点,每一时刻他都需要不断移动,通过一条无向边的时间是1,问最早能在什么时刻到达n号点(其实并不知道题解在说什么,膜完代码yy了一个感觉差不多的) 最朴素的暴力即记录v[i][j]表示在i这个时间点能否到达j,然后枚举每条边转移,复杂度是O(Tm)的 我们考虑这样做慢在哪里:每条边的生效时间让他变成了T条边,于是边的总数是Tm的 注意到,一原创 2017-09-20 21:23:18 · 555 阅读 · 0 评论 -
BZOJ1097: [POI2007]旅游景点atr
用dijstra求出K个点两两的距离和1到他们,他们到N的距离,然后就可以状压了 可以预处理一下哪些点一定要在i之前走到,转成二进制存在pre[i],这样可以加速判断code:#include<set>#include<map>#include<deque>#include<queue>#include<stack>#include<cmath>#include<ctime>#inc原创 2017-09-23 20:39:30 · 495 阅读 · 0 评论 -
BZOJ2007: [Noi2010]海拔
首先最优解一定可以是左上的一片区域海拔为0,右下的一片区域海拔为1 证明的话,如果有很多小数的话,对于一个海拔为小数的格子,他的海拔变成相邻的格子中的一个的海拔,一定不比原来劣,那么对于海拔相同的,连在一起的格子视为一个块,这个块的海拔若是小数,他仍然可以按上文的方式合并到其他块,最后只剩一块0和一块1(为什么0和1不能合并?能合并当然好但是题目规定了两个点的海拔)然后花费就来自于0和1的分界线,原创 2017-04-27 08:37:57 · 651 阅读 · 0 评论 -
BZOJ3482: [COCI2013]hiperprostor
询问不多可以当单次询问做 对于一条A到B的路径,若上面有a条特殊边,他的长度就为ax+b 先将特殊边长视为0,求出f[x][t]表示A到t,走了x条特殊边的最短路 那么A->B=a*x+f[a][B],这些路径的长度对应平面上的若干条直线,a就是这些直线的斜率 如果不存在f[0][B]就有无限种可能值,因为没有上界 否则维护一个凸包就可以求出所有最短路的可能值了code:#include<原创 2017-04-27 09:29:00 · 877 阅读 · 0 评论 -
BZOJ2709: [Violet 1]迷宫花园
二分v(上下移动花费)的值,跑最短路验证code:#include<set>#include<map>#include<deque>#include<queue>#include<stack>#include<cmath>#include<ctime>#include<bitset>#include<string>#include<vector>#include<cstdio>原创 2017-04-27 08:52:37 · 479 阅读 · 0 评论 -
IOI2017 古书books
乐滋滋在wc上讲的题对于这类最优化问题,有一个套路是考虑答案的下界,然后判看能不能到达这个下界 首先一个显然的下界是 ∑|i−ai|∑|i−ai|\sum |i-ai| ,但注意到这个下界不够紧,比如序列 1 0 3 2,0和3之间的间隔至少要跨越2次 建一个图,每本书代表一个点,连出一条有向边到他要去的位置,这个的意思就是指这个图中边不相交的环之间的跨越可能要额外的花费这样确定的下界...原创 2018-02-11 12:54:20 · 1501 阅读 · 0 评论