Tarjan求LCA是一种离线的LCA求法,它需要先知道所有的询问,之后通过dfs和并查集维护以求出LCA,这是一种线性的做法,如果有n个节点m次询问,那么复杂度为O(n+m)。 具体做法怎么做呢?其实就是dfs+并查集。 我们首先用链式前向星去存这棵树,存所有的询问关系(为什么一会再说),注意询问 ...
分类:
其他好文 时间:
2018-10-05 10:44:57
阅读次数:
118
范围最小值问题(Range Minimum Query) 常用Tarjan的Sparse Table算法,预处理时间为$O(nlogn)$,查询为$O(1)$ cpp int rmq[maxn][maxn]; void rmq_init(int a[],int l,int r) { for (int ...
分类:
其他好文 时间:
2018-10-02 22:20:59
阅读次数:
215
[题目链接] https://codeforces.com/contest/475/problem/B [算法] 建图后运行Tarjan算法 , 判断强连通分量数是否为1 时间复杂度 : O(NM) [代码] ...
分类:
其他好文 时间:
2018-10-01 18:23:30
阅读次数:
138
我真的好喜欢图论啊。 (虽然可能理解的并不深hhh) 上一次(暑假)我们初探了强联通分量,这一次我们再探。(特别感谢pku-lyc老师的课件。有很多引用) 上次我们忘记讨论复杂度了。tarjan老爷爷的算法都很strong as flash。这次是O(N)。 强联通分量中任何两个点可互相到达。(显然 ...
分类:
移动开发 时间:
2018-09-30 23:22:56
阅读次数:
313
Description Description 给出N 个点,M 条边的有向图,对于每个点v,求A(v) 表示从点v 出发,能到达的编号最大的点。 给出N 个点,M 条边的有向图,对于每个点v,求A(v) 表示从点v 出发,能到达的编号最大的点。 给出N 个点,M 条边的有向图,对于每个点v,求A( ...
分类:
编程语言 时间:
2018-09-29 22:43:08
阅读次数:
187
#include #include using namespace std; const int MAX_N=100; const int MAX_M=10000; struct edge{ int v,next; int len; }E[MAX_M]; int p[MAX_N],eid; void... ...
分类:
编程语言 时间:
2018-09-29 14:33:24
阅读次数:
124
5017: [Snoi2017]炸弹 Description 在一条直线上有 N 个炸弹,每个炸弹的坐标是 Xi,爆炸半径是 Ri,当一个炸弹爆炸时,如果另一个炸弹所在位置 Xj 满足: Xi?Ri≤Xj≤Xi+Ri,那么,该炸弹也会被引爆。 现在,请你帮忙计算一下,先把第 i 个炸弹引爆,将引爆多 ...
分类:
其他好文 时间:
2018-09-28 13:45:11
阅读次数:
192
传送门 终于有一道能够一次AC的Tarjan题啦! 这个题还是很简单的,首先Tarjan缩点,之后把新图建出来之后发现,因为要控制所有间谍,那么肯定得从入度为0的间谍下手,所以如果有任何入度为0的间谍不愿意被收买的话任务就失败了,否则的话直接topo排序统计答案即可。 图也许是不联通的,所以要用循环 ...
分类:
其他好文 时间:
2018-09-28 01:32:09
阅读次数:
192
传送门 题目简单来说就是给一个有向图,将图转化为DAG图后,求图中最长链及最长链的个数。 思路 用 tarjan 缩点重构将原图转换为一个有向无环图,让后在新图上跑 topo 求出最长链。 最长链的个数可以用动态规划,设 e[ i ] 表示新图中以 i 为终点的方案数,那么 e[ i ] 就等于连到 ...
分类:
其他好文 时间:
2018-09-26 20:44:35
阅读次数:
181
题意: 给定一个n个点m条边的无向图,q个操作,每个操作给(x,y)连边并询问此时图中的割边有多少条。(连上的边会一直存在) n<=1e5,m<=2*10^5,q<=1e3,多组数据。 题解: 用tarjan求边双连通分量并缩点,缩点后组成一棵树,记录此时割边共有sum条。 连接(x,y),设c[i ...
分类:
移动开发 时间:
2018-09-26 18:20:24
阅读次数:
227