图中环学习指南

发布时间 2023-10-16 20:54:02作者: White_Sheep

无向图求最大环长度

/*
时间戳+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;
}