图
谭xl老司的炮兵
这个作者很懒,什么都没留下…
展开
-
关于Tarjan(3)——离线LCA
LCA(最近公共祖先),指对于一棵树上任意两个节点往上走最早都能到达的节点。求LCA有两种方法,一种是倍增,另一种则是Tarjan。。。。。。。。Tarjan巧妙利用并查集的思想;这里的Tarjan是离线算法先Tarjan下去;首先有fa[NUM]=num; 回溯时将子节点的fa变为num如果对于num的询问中另一个点已经访问;那他们的LCA为另一个点的find(f原创 2017-02-02 20:11:37 · 235 阅读 · 3 评论 -
点分治。。。。。
点分治,就是在树上分治,讲得很高大上。。。。。。。。实际上就是findroot,answer两个操作;根据分治的处理方法:分成若干个子问题因此,在每次dfs都要查找root;据说这样就是优化。。。。原创 2017-02-07 11:53:47 · 230 阅读 · 0 评论 -
Dark的项链(树链剖分)
P2272 - Dark的锁链Description无向图中有N个节点和两类边,一类边被称为主要边,而另一类被称为附加边。Dark有N – 1条主要边,并且Dark的任意两个节点之间都存在一条只由主要边构成的路径。另外,Dark还有M条附加边。你的任务是把Dark斩为不连通的两部分。一开始Dark的附加边都处于无敌状态,你只能选择一条主要边切断。一旦你切断了一条主要原创 2017-02-10 14:11:47 · 318 阅读 · 0 评论 -
网络流初步之最大流(增广路算法)
网络流是一个联通图;网络流有如下三个性质:1.一条边上容量恒大于流量。2.斜对称性,f(u,v)=-f(v,u);3.对于非源点和汇点有sigema(i,j){i,j属于E}=0;为了更方便算法的实现,一般根据原网络定义一个残量网络。其中r(u,v)为残量网络的容量。r(u,v) = c(u,v) – f(u,v)*反向边也有r!!!!增广路是指一条源点到汇点的原创 2017-02-10 22:51:37 · 697 阅读 · 0 评论 -
关于Tarjan(1)
众所周知,Tarjan这个人特别调子,在图论等方面有重大成效,如离线求LCA,强连通分量,割点等。这里只对求割点进行代码剖析。所以上板子void tarjan(int now){//now当前节点 int num1=0;//dfn为时间戳,low为时间戳最小的祖先 dfn[now]=low[now]=++num; vis[now]=true; for(int i=原创 2017-01-22 19:06:10 · 296 阅读 · 0 评论 -
关于Tarjan(2)
Tarjan有第二个神奇的用法,求强连通分量!!!!!!!!!!!!!!!!!!!同样利用了dfn:dfs序,low:能回到的最早祖先的dfn;废话少说 上板子#include#include#include#include#include#include#include#include//栈的stl需要头文件 #includeusing namespace std;原创 2017-01-23 10:26:14 · 180 阅读 · 0 评论