我们便以tarjan_LCA为模板,顺便复习复习tarjan_LCA。
node ( d f s ) (dfs) (dfs)
#include<cstdio>
#define N 500010
using namespace std;
struct node{
int v,fr;}e[N<<1];
struct edge{
int v,fr,num;}g[N<<1];
int tail[N],head[N],lca[N],fa[N];
int n,m,s,cnt=0,cnt1=0;
bool bz[N];
inline int read()
{
int x=0; char c=getchar();
while (c<'0' || c>'9') c=getchar();
while (c>='0' && c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x;
}
inline void add(int u,int v) {
e[++cnt]=(node){
v,tail[u]}; tail[u]=cnt;}
inline void add1(int u,int v,int num) {
g[++cnt1]=(edge){
v,head[u],num},head[u]=cnt1;}
int find(int x) {
return !fa[x] ? x:fa[x<