随笔分类 -  图论—spfa

摘要:洛谷的数据毒啊 把(i,j,k)作为一个点spfa,表示点(i,j)朝向k方向,然后向四个方向转移即可 cpp include include include using namespace std; const int N=105,inf=1e9,dx[]={ 1,1,0,0},dy[]={0,0 阅读全文
posted @ 2018-05-09 08:24 lokiii 阅读(130) 评论(0) 推荐(0)
摘要:洛谷数据好强啊,普通spfa开o2都过不了,要加双端队列优化 因为是双向边,所以dis(u,v)=dis(v,u),所以分别以pa1和pa2为起点spfa一遍,表示pb pa1 pa2和pb pa2 pa1,取个min即可 cpp include include include using name 阅读全文
posted @ 2018-05-08 21:11 lokiii 阅读(138) 评论(0) 推荐(0)
摘要:因为是双向边,所以相当于两条到1的最短路和,先跑spfa然后直接处理询问即可 阅读全文
posted @ 2018-05-08 20:52 lokiii 阅读(156) 评论(0) 推荐(0)
摘要:tag是假的,用了及其诡异的方法判负环 正权无向边和负权有向边的图 cpp include include include using namespace std; const int N=505,inf=210000000; int n,m,w,h[N],cnt,d[N]; struct qwe 阅读全文
posted @ 2018-05-03 20:36 lokiii 阅读(193) 评论(0) 推荐(0)
摘要:这几天写USACO水题脑子锈住了……上来就贪心,一交就WA 事实上这个是一个叫最短路树的东西,因为能保证只有一条最短路,所以所有最短路合起来是一棵以1为根的树,并且在这棵树上,每个点被精灵占据的路是它通向father的 先spfa把最短路dis[]和最短路树求出来,把被选入最短路树的边打上删除标记 阅读全文
posted @ 2018-05-03 15:18 lokiii 阅读(135) 评论(0) 推荐(0)
摘要:把add传参里的double写成int我也是石乐志…… 首先这个东西长得就很01分数规划 然后我不会证为什么没有8字环,我们假装他没有 那么设len为环长 $$ ans \leq \frac{\sum_{i=1}^{len}f_i}{\sum_{i=1}^{len}t_i} $$ $$ ans \s 阅读全文
posted @ 2018-05-02 19:52 lokiii 阅读(143) 评论(0) 推荐(0)
摘要:至死不用dijskstra系列2333,洛谷上T了一个点,开了O2才过 基本想法是建立分层图,就是建k+1层原图,然后相邻两层之间把原图的边在上一层的起点与下一层的终点连起来,边权为0,表示免了这条边的边权,然后答案就是第0层的s到k层的t的最短路,因为0权边总是从上一层连到下一层,所以到达k层就表 阅读全文
posted @ 2018-05-01 08:40 lokiii 阅读(134) 评论(0) 推荐(0)
摘要:正反加边分别跑spfa最短路,把两次最短路的和求个max就是答案 cpp include include include include using namespace std; const int N=2005,M=200005; int n,m,s,x[M],y[M],z[M],h[N],cnt 阅读全文
posted @ 2018-04-27 22:01 lokiii 阅读(168) 评论(0) 推荐(0)
摘要:二分答案,然后把边权大于二分值的的边赋值为1,其他边赋值为0,然后跑spfa最短路看是否满足小于等于k条边在最短路上 阅读全文
posted @ 2018-04-25 14:19 lokiii 阅读(165) 评论(0) 推荐(0)
摘要:我是智障 3,读优写错了调了半天没发现= = 虽然是个最短路却有网络流一般的神建图啊。 首先发现在拐角处转弯是最优的,于是先离散化,然后矩形的四个顶点向距离它最近的上下左右点连边,跑spfa即可。 就是难写啊,还要判断无解:st在矩形里;dis[t]=inf 阅读全文
posted @ 2018-04-15 17:04 lokiii 阅读(193) 评论(0) 推荐(0)
摘要:明明是个最短路却有网络流一样的神建图= A = 首先要是暴力建图的话最坏有O(nm)条边。所以优化建图。 考虑分块思想,设bs=sqrt(n),对于p大于bs的,直接连边即可,最多有sqrt(n)条,注意边权不全是1了,因为要从b走过去;对于p小于等于bs,先把每栋楼建sqrt个辅助点,然后这些辅助 阅读全文
posted @ 2018-04-12 10:37 lokiii 阅读(293) 评论(0) 推荐(0)
摘要:明明优化了spfa还是好慢…… 因为只能取一次值,所以先tarjan缩点,把一个scc的点权和加起来作为新点的点权,然后建立新图。在新图上跑spfa最长路,最后把酒吧点的dis取个max就是答案。 阅读全文
posted @ 2018-04-11 11:24 lokiii 阅读(142) 评论(0) 推荐(0)
摘要:用到了网络流的思想(大概)。新建一个源点s,所有边权扩大两倍,然后所有的点向s连边权为点权的无向边,然后以s为起点跑spfa(S什么L优化的),这样每个点到s的距离就是答案。 原因的话,考虑答案应该是min(2\ dis[i][j]+a[j]} ),那么每个点到s的距离就是若干条边边权的二倍加上某个 阅读全文
posted @ 2018-02-17 22:01 lokiii 阅读(122) 评论(0) 推荐(0)
摘要:…为什么最短路的题会出现在网络流24里?? 因为范围是15所以直接把每个状态作为一个点,向它能转移到的点连有向边即可。可以不用建图(据说建图存不下?),直接枚举m个转移方案。位运算比较麻烦注意不要写错。 阅读全文
posted @ 2018-02-06 11:28 lokiii 阅读(169) 评论(0) 推荐(0)