无向图求最大环长度
/*
时间戳+dfs->求最大环的长度 (无向图)
*/
const int N=2e5+10;
//b数组:找出每个连通块的最大环,
//dfn数组:为每个节点打上时间戳,演变为一颗深度优先搜索树
int tot,b[N],dfn[N];
bool vis[N];
vector<int> e[N];
int n;
void dfs(int u,int cnt){
//cnt-dfn[u]为环的大小
if(vis[u]) {b[tot]=max(b[tot],cnt-dfn[u]);return;}
dfn[u]=cnt;
vis[u]=1;
for(auto v:e[u]) dfs(v,cnt+1);
}
int main() {
for(int i=1;i<=n;i++){
if(!vis[i]) dfs(i,0);
}
return 0;
}
标签:学习指南,cnt,int,中环,tot,vis,dfn,dfs
From: https://www.cnblogs.com/taotao123456/p/17768327.html