自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(5)
  • 收藏
  • 关注

原创 最短路算法集合

一、Dijkstra算法:仅限用于无边权为负数的图,更不能正确处理负环的情况。把所有点分成两个集合,S集合是存已经确定下来、不会再更改(准确一点的话是“不能再更改”)的点,T集合是待确定的点集。从T集合中的点中,选择一个到st最近的点x。让这个点为其它点更新:如果y点到st的距离大于 x点到st的距离 + x->y这条边的距离,则改进y到st的值。然后x加入S集合。更透彻地理解,这种算法每次...

2018-02-13 11:36:09 450

原创 SPFA—SLF+LLL优化

spfa的时间复杂度为O(me),其中e为路径数量,m为所有顶点进队的平均次数。有两种优化策略,分别是SLF和LLL。如果两者加起来,最大可以减少50%的时间。它们的最终目的是一致的,都是想让最靠进答案的点先去更新它附近的点,可能更新过程中就把目前队列中的点给更新了。如果先让那些迟早要被更新的点先去更新其他点,所有这些点迟早会被再更新一遍。因此,m的值就会变大。想要控制spfa的时间复杂度,就要从...

2018-02-12 15:30:09 582 2

原创 树状数组—改段求段

改段求段是树状数组中的一个重难点,它需要运用上改段求点的知识。需要2个树状数组:c1,c2。c1与改段求点的c一样,都是记录差值,为了求出某个点的值。c2用来记录当以c1[ i ]×i来求1~i的值时,与真实值的差(c2[ i ]=ans-c1[ i ]×i),所以ans=c1[ i ]×i+c2[ i ]。当c2需更新时,只需改头和尾+1即可。头:加上 -(x-1)*z,因为a[ x ]增大了,...

2018-02-08 11:07:53 545

原创 树状数组—改点求段

改点求段是树状数组中最简单的,它只改变某个点,然后求某一段。获得x的管理范围:int lowbit(int x) { return x&-x; }给x加上k:(不停地找上司,不停地改变,直到到了头)void add(int x,int k) { while(x<=n) { c[x]+=k; x+=lowbit(x); ...

2018-02-08 11:00:20 387

原创 树状数组—改段求点

对于更改一段区间的值,然后求出某个点的值的问题,我们可以先记录它的第一个量,后面记录两两的差值(c[ i ] = a[ i ] - a[ i-1 ]),所以a[ i ] = a[ i-1 ] + c[ i ]。这样就可以利用树状数组求和快的特点,迅速求出其值。相当于每个c存的是与上一个值的距离(意思就是需要改变多少就能得到现在这个值)。在更新时也只需要改区间头的c值 以及区间尾+1的c值 即可。其...

2018-02-08 10:55:14 462

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除