//Tarjan求桥
void tarjan(int now,int id){
	dfn[now]=low[now]=++dfnc;
	for(int i=head[now];i!=-1;i=b[i].next){
		if(i==(id^1)) continue;
		int u=b[i].to;
		if(!dfn[u]){
			tarjan(u,i);
			low[now]=min(low[now],low[u]);
			if(dfn[now]<low[u]) bridge[i]=bridge[i^1]=true;
		} else {
			low[now]=min(low[now],dfn[u]);
		}
	}
}
//求边双连通分量
void dfs(int now,int id){
	shuyu[now]=id;
	for(int i=head[now];i!=-1;i=b[i].next){
                int u=b[i].to;
		if(shuyu[u]) continue;
		if(!bridge[i]) dfs(u,id);
	}
}
//边双缩点
	for(int i=1;i<=n;i++){
		for(int j=head[i];j!=-1;j=b[j].next){
                        int u=b[j].to;
			if(shuyu[i]!=shuyu[u]){
				ad(shuyu[i],shuyu[u]);
				ad(shuyu[u],shuyu[i]);
			}
		}
	}

相关文章:

  • 2021-11-28
  • 2022-02-17
  • 2021-11-28
  • 2021-09-27
  • 2021-11-28
  • 2021-11-28
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-11-28
  • 2021-09-13
  • 2022-12-23
  • 2021-11-28
相关资源
相似解决方案