洛谷3388 【模板】割点 tarjan算法
题目描述
给出一个n个点,m条边的无向图,求图的割点。
关于割点
在无向连通图中,如果将其中一个点以及所有连接该点的边去掉,图就不再连通,那么这个点就叫做割点(cut vertex / articulation point)。
题解

在一个无向图里的割点分为两种,第一种就是一棵树的根节点并且他的度要大于等于2,删去这个点他的子树就不连通了(如上图的1号点)。
第二种就要用到tarjan算法的思想,tarjan求出每个点的dfs顺序,然后记录他子树中能访问到的dfn最早的点。如果一个点不为根且他的子树的low大于他的dfn,即他的子树要在访问过他之后才能访问那个点,那么这个点删去以后图也会不连通。(如上图中的5,6号点必须在访问5之后才能访问到)。
代码
//洛谷3388 割点 tarjan
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int n,m,cnt,head[];
int dfn[],low[],cut[];
struct edge{
int next,to;
}e[];
void insert(int u,int v){
cnt++;
e[cnt].next=head[u];e[cnt].to=v;
head[u]=cnt;
}
int top,ind,k;
void tarjan(int x,int root){
dfn[x]=low[x]=++ind;
int du=;
for(int i=head[x];i;i=e[i].next){
int s=e[i].to;
if(!dfn[s]){
tarjan(s,root);
low[x]=min(low[s],low[x]);
if(low[s]>=dfn[x]&&x!=root)cut[x]=;
if(x==root)du++;
}
low[x]=min(dfn[s],low[x]);
}
if(x==root&&du>=)cut[root]=;
}
int mx=;
int ans;
int main(){
scanf("%d%d",&n,&m);
int u,v,t;
for(int i=;i<=m;i++){
scanf("%d%d",&u,&v);
insert(u,v);
insert(v,u);
}
for(int i=;i<=n;i++){
if(!dfn[i])tarjan(i,i);
}
for(int i=;i<=n;i++){
if(cut[i])mx++;
}
printf("%d\n",mx);
for(int i=;i<=n;i++){
if(cut[i]){
printf("%d ",i);
}
}
return ;
}
洛谷3388 【模板】割点 tarjan算法的更多相关文章
- 洛谷P3373 [模板]线段树 2(区间增减.乘 区间求和)
To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格 ...
- 洛谷3388 tarjan割点
题目链接:https://www.luogu.com.cn/problem/P3388 tarjan算法果然牛逼,时间复杂度是O(|V|+|E|),所以1e4个结点2e5条边的图完全不在话下orz o ...
- 洛谷P3375 [模板]KMP字符串匹配
To 洛谷.3375 KMP字符串匹配 题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next.如果 ...
- 割点 —— Tarjan 算法
由于对于这一块掌握的十分不好,所以在昨天做题的过程中一直困扰着我,好不容易搞懂了,写个小总结吧 qwq~ 割点 概念 在无向连通图中,如果将其中一个点以及所有连接该点的边去掉,图就不再连通,那么这个点 ...
- LCT总结——概念篇+洛谷P3690[模板]Link Cut Tree(动态树)(LCT,Splay)
为了优化体验(其实是强迫症),蒟蒻把总结拆成了两篇,方便不同学习阶段的Dalao们切换. LCT总结--应用篇戳这里 概念.性质简述 首先介绍一下链剖分的概念(感谢laofu的讲课) 链剖分,是指一类 ...
- 洛谷 1262 间谍网络 Tarjan 图论
洛谷 1262 图论 tarjan 并不感觉把这道题目放在图的遍历中很合适,虽然思路比较简单但是代码还是有点多的,, 将可收买的间谍的cost值设为它的价格,不可购买的设为inf,按照控制关系连图,T ...
- 【AC自动机】洛谷三道模板题
[题目链接] https://www.luogu.org/problem/P3808 [题意] 给定n个模式串和1个文本串,求有多少个模式串在文本串里出现过. [题解] 不再介绍基础知识了,就是裸的模 ...
- 洛谷-P5357-【模板】AC自动机(二次加强版)
题目传送门 -------------------------------------- 过年在家无聊补一下这周做的几道AC自动机的模板题 sol:AC自动机,还是要解决跳fail边产生的重复访问,但 ...
- 洛谷P1119-灾后重建-floyd算法
洛谷P1119-灾后重建 题目描述 给出\(B\)地区的村庄数NN,村庄编号从\(0\)到\(N-1\),和所有\(M\)条公路的长度,公路是双向的. 给出第\(i\)个村庄重建完成的时间\(t_i\ ...
随机推荐
- 【转】IIS初始化(预加载),解决第一次访问慢,程序池被回收问题
原地址:http://www.debugrun.com/a/mpyWXwg.html 读在最前面: 1.本文以IIS8,Windows Server 2012R2做为案例 2.IIS8 运行在 Win ...
- Windows 10 Mobile 演示:系统输入法功能演示
笔者近期会发布多篇<Windows 10 Mobile 演示>文章,帮助想买 Windows 10 手机的朋友了解 Windows 10 Mobile 系统特色.今天给大家带来 Windo ...
- POJ 1979 Red and Black (简单dfs)
题目: 简单dfs,没什么好说的 代码: #include <iostream> using namespace std; typedef long long ll; #define IN ...
- nginx 子进程 woker process 启动失败的问题
问题: 重启nginx服务,worker process 子进程启动失败,启动的都是master进程: 负载急速升高(平常都是4-5),占用CPU资源多的前十进程都是nginx : nginx 错误日 ...
- 解决IIS服务器部署 字体图标找不到的原因
引言 我们往往在IIS上部署Web项目,或者发布Web项目的时候,经常会遇到浏览器找不到字体文件(woff/woff2)产生的错误.这样会导致浏览器无法加载字体图标,在影响加载时间的同时,更无法显示对 ...
- selenium自动化(一).........................................搭建环境
一 环境搭建 安装python(建议使用py3) py2和py3在语法上会有一定的差别 第三方插件逐步转向py3,很多py2的插件已经停止维护 本教程的所有代码基于py3 安装selenium插件 ...
- tinymce原装插件源码分析(四)-fullscreen
fullscreen 作为一款文本编辑器,全屏功能是非常有必要的.在插件中主要是修改一些css style和触发resize事件. style问题(反例): 见github源码:https://git ...
- js验证输入框
项目开发中,都会有对表单form中的input输入框进行一些限制验证 如: <!DOCTYPE html><html lang="en"> <head ...
- BZOJ 2560(子集DP+容斥原理)
2560: 串珠子 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 757 Solved: 497[Submit][Status][Discuss] ...
- BZOJ 1050 [HAOI2006]旅行comf(最小生成树)
题意 第一行包含两个正整数,N和M.下来的M行每行包含三个正整数:x,y和v.表示景点x到景点y之间有一条双向公路 ,车辆必须以速度v在该公路上行驶.最后一行包含两个正整数s,t,表示想知道从景点s到 ...