WA了好多次...先tarjan缩点, 然后题意就是求DAG上的一条最长链. dp(u) = max{dp(v)} + totu, edge(u,v)存在. totu是scc(u)的结点数. 其实就是记忆化搜一下...重边就用set判一下-------------------------------...
分类:
其他好文 时间:
2015-10-13 20:59:08
阅读次数:
297
给定一棵树求任意两个节点的公共祖先tarjan离线求LCA思想是,先把所有的查询保存起来,然后dfs一遍树的时候在判断。如果当前节点是要求的两个节点当中的一个,那么再判断另外一个是否已经访问过,如果访问过的话,那么它的最近公共祖先就是当前节点祖先。下面是tarjan离线模板:#include #in...
分类:
其他好文 时间:
2015-10-12 15:44:07
阅读次数:
185
先Tarjan缩点,然后建反图拓扑看每一个点可以由哪里经过,用到bitset定义zt状态压缩一下,拓扑图中x->y :则表示y可以到达x,所以zt[y]=zt[y]|zt[x]就知道了y的,然后在for一下每个点及其所到达的点, Cgema算出两两乘积得出ans。 1 #define MAXN 2....
分类:
Web程序 时间:
2015-10-11 19:36:32
阅读次数:
236
强连通分量的求解,虽说第一眼一看数据量就知道能用Floyd写,但是谁让我太渣呢,还是别偷懒了。熟悉下tarjan。/*ID: modengd1PROG: schlnetLANG: C++*/#include #include #include #include #include using name...
分类:
Web程序 时间:
2015-10-08 01:41:52
阅读次数:
346
把集合A[i]看作i点的前驱点集合,建成一个DAG,并新建超级源S,向每个前驱集合为空的点连边,那么B[i]就是S到i的必经点集合。首先使用Lengauer-Tarjan算法建立出以S为起点的Dominator Tree,那么B[i]就是i在树上的所有祖先。对于一个询问,构造出虚树,然后统计虚树上每...
分类:
其他好文 时间:
2015-10-07 06:18:35
阅读次数:
231
LCA 最近公共祖先 Tarjan的基本想法和做法
分类:
编程语言 时间:
2015-10-04 18:24:08
阅读次数:
1647
一,首先就是比较简单(弱智的我看了将近半小时)的tarjan了;我一直在纠结于一个地方就是如果要求的是8和5的话我一直以为他求出来的最近公共祖先是1...但不是,因为8和5都属于2,在遍历2的时候就求出来了,同理要是求8和9的话在遍历4的时候也都求出来了。这一步我想了很久真的怀疑自己的智商。不过至少...
分类:
其他好文 时间:
2015-10-02 16:07:53
阅读次数:
173
lca就好了,不难理解hdu1269:模板题--------------------------------------------------------------------------------------------------------------------------------...
分类:
编程语言 时间:
2015-10-01 19:14:35
阅读次数:
164
才想起来这题还没做。。。当时不造LIS有nlogn做法,然后tarjan写残了QAQ。。。二分查找写得烦了。。。以后还是放弃二分,直接lower_bound吧。。 1 #include 2 #define inc(i,l,r) for(i=l;i=r;i--) 4 #define inf 1e9 5...
分类:
其他好文 时间:
2015-09-29 20:32:26
阅读次数:
205
LCA tarjan 离线算法#include #include #include using namespace std;const int maxn = 40010;int first[maxn], head[maxn], cnt, sum;struct edge{ int u, v, w, n...
分类:
其他好文 时间:
2015-09-28 15:53:59
阅读次数:
176