无向图的点双连通分量(tarjan模板)
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<stack>
#include<vector>
using namespace std;
#define maxn 7500
#define inf 0x3f3f3f3f
int n,m;
int g[maxn][maxn];
int clock;
int low[maxn],pre[maxn];
stack<int>s;
int bc;
vector<int>bcc[maxn];
int dfs(int u,int fa){
low[u]=pre[u]=++clock;
s.push(u);
for(int v=1;v<=n;v++){
if(!g[u][v])continue;
if(!pre[v]){
int lowv=dfs(v,u);
low[u]=min(low[u],lowv);
if(lowv>=pre[u]){
bc++;
bcc[bc].clear();
int tmp=-1;
while(!s.empty()){
tmp=s.top();
s.pop();
bcc[bc].push_back(tmp);
if(tmp==u)break;
}
if(tmp!=-1)s.push(tmp); //割顶要加回去,随意割顶至少是两个不同双联通分量的公共点
}
}
else if(pre[v]<pre[u]&&fa!=v){
low[u]=min(low[u],pre[v]);
}
}
return low[u];
}
void inital(){
clock=0;
bc=0;
memset(pre,0,sizeof pre);
memset(low,inf,sizeof low);
while(!s.empty()){
s.pop();
}
}
int main()
{
int u,v;
freopen("in.txt","r",stdin);
while(~scanf("%d%d",&n,&m)){
inital();
for(int i=0;i<m;i++){
scanf("%d%d",&u,&v);
g[u][v]=g[v][u]=1;
}
for(int i=1;i<=n;i++){
if(!pre[i])dfs(i,-1);
}
for(int i=1;i<=n;i++){
printf("%d %d\n",pre[i],low[i]);
} printf("以下是点联通分量%d:\n",bc);
for(int i=1;i<=bc;i++){
printf("%d:",i);
for(int j=0;j<bcc[i].size();j++){
printf("%d ",bcc[i][j]);
}
printf("\n");
} }
}
无向图的点双连通分量(tarjan模板)的更多相关文章
- Tarjan算法求解无向连通图的割点、割边、点双连通分量和边双连通分量的模板
历时好几天,终于完工了! 支持无向图四种功能:1.割点的求解 2.割边的求解 3.点双连通分量的求解 4.边双连通分量的求解 全部支持重边!!!!全部支持重边!!!!全部支持重边!!!! 测试数据: ...
- 点/边 双连通分量---Tarjan算法
运用Tarjan算法,求解图的点/边双连通分量. 1.点双连通分量[块] 割点可以存在多个块中,每个块包含当前节点u,分量以边的形式输出比较有意义. typedef struct{ //栈结点结构 保 ...
- 无向图的边双连通分量(EBC)
嗯,首先边双连通分量(双连通分量之一)是:在一个无向图中,去掉任意的一条边都不会改变此图的连通性,即不存在桥(连通两个边双连通分量的边),称作边双连通分量.一个无向图的每一个极大边双连通子图称作此无向 ...
- UOJ #146. 【NOIP2015】信息传递 连通分量 tarjan模板题
http://uoj.ac/problem/146 题解:强连通分量 tarjan模板题.同时试了一下codeblock #include<bits/stdc++.h> using nam ...
- Bridges Gym - 100712H 无向图的边双连通分量,Tarjan缩点
http://codeforces.com/gym/100712/attachments 题意是给定一个无向图,要求添加一条边,使得最后剩下的桥的数量最小. 注意到在环中加边是无意义的. 那么先把环都 ...
- poj 1523 SPF(双连通分量割点模板)
题目链接:http://poj.org/problem?id=1523 题意:给出无向图的若干条边,求割点以及各个删掉其中一个割点后将图分为几块. 题目分析:割点用tarjan算法求出来,对于每个割点 ...
- UOJ#30/Codeforces 487E Tourists 点双连通分量,Tarjan,圆方树,树链剖分,线段树
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ30.html 题目传送门 - UOJ#30 题意 uoj写的很简洁.清晰,这里就不抄一遍了. 题解 首先建 ...
- 无向图的割点和桥 tarjan 模板
#include <bits/stdc++.h> using namespace std; const int MAXN = 20005; const int MAXM = 100005; ...
- Graph_Master(连通分量_A_双连通分量+桥)
hdu 5409 题目大意:给出一张简单图,求对应输入的m条边,第i-th条边被删除后,哪两个点不连通(u,v,u<v),若有多解,使得u尽量大的同时v尽量小. 解题过程:拿到题面的第一反应缩点 ...
随机推荐
- python - log日志
# -*- coding:utf-8 -*- ''' @project: jiaxy @author: Jimmy @file: study_logging.py @ide: PyCharm Comm ...
- VMware Workstation 14 PRO 下安装Ubuntu 16.04 LTS教程
一.准备好安装的VMware Workstation 14 PRO 1.VMware Workstation 14 PRO下载链接:http://rj.baidu.com/soft/detail/13 ...
- day01_07.逻辑与字符串运算符
&&(并且)====>发现&符号总是打错,记忆口令:&7(暗器),在数字7上面,在python中是and ||(或者)====>在python中是or . ...
- PTA 11-散列2 Hashing (25分)
题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/679 5-17 Hashing (25分) The task of this pro ...
- ajax对象的获取及其常用属性
ajax对象的获取及其常用属性 (1)什么是ajax asynchronous javascript and xml(异步的javascript和xml). 是一种用来改善用户体验的技术,其实质是利用 ...
- BZOJ3930 [CQOI2015]选数 【容斥】
题目 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公约数,以便进一步研 ...
- python hashlib模块 logging模块 subprocess模块
一 hashlib模块 import hashlib md5=hashlib.md5() #可以传参,加盐处理 print(md5) md5.update(b'alex') #update参数必须是b ...
- *NOI热身赛C. 小x的城池
码农题gun.
- 如何用github展示前端页面
如何在github上展示你的前端页面 参考:https://luozhihao.github.io/demo/ 感谢作者 1.New reposipory 2.进入你本机目录 我是在d:vuedemo ...
- angular杂谈
<element ng-include="filename" onload="expression" autoscroll="expressio ...