LCA tarjan+并查集POJ1470】的更多相关文章

LCA tarjan+并查集POJ1470 https://www.cnblogs.com/JVxie/p/4854719.html 不错的一篇博客啊,让我觉得LCA这么高大上的算法不是很难啊,嘻嘻嘻 这是个离线算法,现在的粗略理解是输入完毕询问完毕后进行解决的算法 用了并查集 1···选取根节点 2···逐个dfs访问所选节点所有的子节点v 3···1··对于子节点的dfs访问到头之后 3···2··标记,进行询问查询 3···3··如果查询的点访问过,输出其目前祖先 4···回溯,合并边,更…
题目链接: Connections between cities Time Limit: 10000/5000 MS (Java/Others)     Memory Limit: 32768/32768 K (Java/Others) Problem Description   After World War X, a lot of cities have been seriously damaged, and we need to rebuild those cities. However,…
Luogu 2245 星际导航(最小生成树,最近公共祖先LCA,并查集) Description sideman做好了回到Gliese 星球的硬件准备,但是sideman的导航系统还没有完全设计好.为了方便起见,我们可以认为宇宙是一张有N 个顶点和M 条边的带权无向图,顶点表示各个星系,两个星系之间有边就表示两个星系之间可以直航,而边权则是航行的危险程度. sideman 现在想把危险程度降到最小,具体地来说,就是对于若干个询问(A, B),sideman 想知道从顶点A 航行到顶点B 所经过的…
本文来自:http://www.cnblogs.com/Findxiaoxun/p/3428516.html 写得很好,一看就懂了. 在这里就复制了一份. LCA问题: 给出一棵有根树T,对于任意两个结点u,v求出LCA(T, u, v),即离根最远的结点x,使得x同时是u和v的祖先. 把LCA问题看成询问式的:给出一系列询问,程序应当对每一个询问尽快做出反应. 对于这类问题有两种解决方法;一是用比较长的时间做预处理,但是等信息充足以后每次回答询问只需要用比较少的时间.这样的算法叫做在线算法.…
Description 给定$N$个点和 $M$条边的无向联通图, 有$Q$ 次操作, 连接两个点的边, 问每次操作后的图中有几个桥 Solution 首先Tarjan找出边双联通分量, 每个双联通分量缩成一个点, 就构成了一棵树, 每一条树边都是桥. 执行连$u, v$ 边时, 用并查集跳到没有桥的深度最浅并且深度比$lca$深的点, 将它与父节点的并查集合并, 再接着跳. 每跳一次, 桥的数量就减少$1$. 另外感谢Iowa 神犇提醒我$cut$数组要开$M << 1$, 不是 $N &l…
[题意] 给一个图,这个图中既有有向边,又有无向边,每条边只能走一次,问图中是否存在环. 最多10^6个点,10^6个无向边,10^6个有向边 [题解] 因为既有有向边又有无向边,所以不能单纯的用tarjan判环,阻碍咱使用tarjan的主要还是无向边,显然不可以把无向边拆成两个有向边来搞,因为这条边只能走一次,拆成两条边可能来回分别走一次,就不满足题意了. 咱可以先处理无向边,无向边可能会把图连成一个个的连通块,用并查集,把这些连通块缩成一个点,注意,如果当发现某个无向边的两个端点在同一个并查…
思路: Kruskal求最大生成树+倍增LCA // by SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define N 105000 int n,m,tot=0,xx,yy,zz,ans; int first[N],v[N*10],next[N*10],w[N*10],f[N],dep[N],fa[N][20],minn[N][20]…
题目链接:http://codeforces.com/contest/505/problem/D 题解:先用tarjan缩点然后再用并查集注意下面这种情况 ‘ 这种情况只需要构成一个大环就行了,也就是说不需要7条边只要6条就够了. #include <iostream> #include <cstring> #include <cstdio> #include <vector> using namespace std; const int M = 2e6 +…
//参考博客 https://www.cnblogs.com/jsawz/p/6723221.html#include<bits/stdc++.h> using namespace std; #define maxn 420000 struct Query{int to,nxt,lca;}q[maxn]; ]; int n,m,p,x,y,tot_e,tot_q,head_q[maxn],head_e[maxn]; int fa[maxn],vis[maxn]; void init(){ me…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586 这题以前做过…现在用tarjan搞一发…竟然比以前暴力过的慢………… 由于是离线算法,需要Query来保存查询数据,Ans来保存结果.最后输出的时候按照idx的顺序输出,所以胡搞了个排序.. dfs每次更新depth,当前点depth是上一个点累积下来的. /* ━━━━━┒ギリギリ♂ eye! ┓┏┓┏┓┃キリキリ♂ mind! ┛┗┛┗┛┃\○/ ┓┏┓┏┓┃ / ┛┗┛┗┛┃ノ) ┓┏┓…