P3388 【模板】割点(割顶)

tarjan爷爷造福世界

  • 割点适用于无向图, 所以low数组定义发生变化,不再是最早能追溯到的栈中节点编号(因为是无向边,没有意义), 而是一直往下走能绕到的最早的割点编号
  • 在tarjan求强连通分量是low[u] = min(low[u], dfn[v]) 与 low[u] = min(low[u], low[v]) 等价 但在求割点时只能用前面的qwq
  • 原因:在求强连通分量时,如果v已经在栈中,那么说明u,v一定在同一个强连通分量中,所以到最后low[u]=low[v]是必然的,提前更新也不会有问题;

代码qwq

 1 #include<cstdio>
 2 #include<iostream>
 3 using namespace std;
 4 const int maxn = 20020, maxm = 100010;
 5 int n, m, num = 0, tim = 0, tot = 0;
 6 int head[maxm], dfn[maxn], low[maxn];
 7 bool cut[maxn];
 8 struct edge {
 9     int nxt, to;
10 }e[maxm<<1];
11 int read() {
12     char ch = getchar(); int x = 0, f = 1;
13     while(ch<'0'||ch>'9') {if(ch == '-') f = -1; ch = getchar();}
14     while(ch>='0'&&ch<='9') {x = x * 10 + ch - '0'; ch = getchar();}
15     return x * f;
16 }
17 void add(int from, int to) {
18     e[++num].nxt = head[from];
19     e[num].to = to;
20     head[from] = num;
21 }
22 void tarjan(int u, int fa) {
23     dfn[u] = low[u] = ++tim;
24     int child = 0;
25     for(int i = head[u]; i; i = e[i].nxt) {
26         int v = e[i].to;
27         if(!dfn[v]) {
28             tarjan(v, fa);
29             low[u] = min(low[u], low[v]);
30             if(low[v] >= dfn[u] && u != fa) cut[u] = 1;
31             //不为根节点, 则对于边(u, v) ,如果low[v]>=dfn[u],此时u就是割点
32             if(u == fa) child++;
33         }
34         low[u] = min(low[u], dfn[v]);/**/
35     }
36     if(child >= 2 && u == fa) cut[u] = 1;
37     //如果是根节点 , 有两棵及以上的子树, 即为割点
38 }
39 int main() {
40     scanf("%d%d", &n, &m);
41     for(int i = 1; i <= m; i++) {
42         int x = read(), y = read();
43         add(x, y), add(y, x);
44     }
45     for(int i = 1; i <= n; i++)
46         if(!dfn[i]) tarjan(i, i);
47     for(int i = 1; i <= n; i++)
48         if(cut[i]) tot++;
49     printf("%d\n", tot);
50     for(int i = 1; i <= n; i++)
51         if(cut[i]) printf("%d ", i);
52     return 0;
53 }

我觉得比缩点好懂QAQ

转载于:https://www.cnblogs.com/Hwjia/p/9856125.html

【学习/模板】tarjan割点相关推荐

  1. 洛谷 P3388 【模板】割点(割顶) 根+非根+dfn[]+low[]+不一样的Tarjan算法

    洛谷  P3388 [模板]割点(割顶)  根+非根+dfn[]+low[]+不一样的Tarjan算法 Tarjan算法,详见https://blog.csdn.net/mrcrack/article ...

  2. BZOJ1123BLO Tarjan割点+乘法原理+dfs

    BZOJ1123 BLO : Tarjan割点+乘法原理+dfs Description 给定一张无向图,求每个点被封锁之后有多少个有序点对(x,y)(x!=y,1<=x,y<=n)满足x ...

  3. 洛谷P3388 【模板】割点(割顶)

    /*表示割点模板很难理解.... 但是呢,可以将整个图用深搜来一步步递归.. dfn[x]<=low[tmp] && x!=mr的点就++: 完毕.... PS:小心第一个节点. ...

  4. 【UOJ#67】新年的毒瘤 Tarjan 割点

    #67. 新年的毒瘤 UOJ直接黏贴会炸...    还是戳这里吧: http://uoj.ac/problem/67#tab-statement Solution 看到这题的标签就进来看了一眼. 想 ...

  5. 割点和桥的模板(割点和割边)

    (1)割点与桥(割边)的定义(只存在于无向图) 割点:无向连通图中,去掉一个顶点及和它相邻的所有边,图中的连通分量数增加,则该顶点称为割点. 桥(割边):无向联通图中,去掉一条边,图中的连通分量数增加 ...

  6. P3388 【模板】割点(割顶) 题解

    博客园同步 原题链接 简要题意: 给定一个图,求所有割点. 割点(割顶)的定义:去掉该点整个图不连通. 前置知识: 强连通分量的 Tarjan \texttt{Tarjan} Tarjan 求法. 不 ...

  7. 【模板】割点(割顶)

    题目背景 割点 题目描述 给出一个n个点,m条边的无向图,求图的割点. 输入输出格式 输入格式: 第一行输入n,m 下面m行每行输入x,y表示x到y有一条边 输出格式: 第一行输出割点个数 第二行按照 ...

  8. HDU 3062 Party(2-sat题模板+tarjan )

    题目: 有n对夫妻被邀请参加一个聚会,因为场地的问题,每对夫妻中只有1人可以列席.在2n 个人中,某些人之间有着很大的矛盾(当然夫妻之间是没有矛盾的),有矛盾的2个人是不会同时出现在聚会上的.有没有可 ...

  9. 模板:割点、桥与双连通

    文章目录 割点 代码 桥 点双连通分量 代码 边双连通分量 代码 割点 和强连通分量十分相似 分为树枝边.前向边和后向边 注意! if(x!=r&&low[to]>=dfn[x] ...

最新文章

  1. System.setProperty()
  2. 三十八、练习、Python判断一个信用卡号是否合理
  3. java泛型程序设计——调用遗留代码
  4. yum install nginx
  5. LeetCode 1854. 人口最多的年份(差分)
  6. 【JavaScript】用Switch实现成绩等级判断
  7. 7-7 天梯赛的善良 (20 分)
  8. 图神经网络将成AI下一拐点!MIT斯坦福一文综述GNN到底有多强
  9. 【洛谷】【treap/堆】P2073 送花
  10. python数据处理太慢_使用Python将数据写入LMDB非常慢
  11. android tv 蓝牙服务_5款面向Android TV的优秀文件管理器
  12. 中国大学慕课计算机操作系统答案,计算机操作系统
  13. 机器人控制器编程课程-教案02-基础
  14. OPTEE CA和TA通信 实现从java到ca
  15. Unity TimeLine学习笔记
  16. 前端处理订单支付超时
  17. pyspark LEAK: ByteBuf.release() was not called before it's garbage-collected. Enable advanced leak
  18. [附源码]计算机毕业设计JAVAjsp教学辅助系统
  19. 古典概型——概率论与数理统计(宋浩)
  20. 文献阅读(60)ACL2021-Attention Calibration for Transformer in Neural Machine Translation

热门文章

  1. 004_常用浏览器内核
  2. Linux查看谁修改的文件,linux如何查看近来修改的文件
  3. 2017年伊始,你需要尝试的25个Android第三方库
  4. JavaWeb:过滤器Filter
  5. 华为数据之道_华为规划的数字世界是什么样子的?
  6. @mapperscan mapper还是无法引用_高能来了!Java的四大引用
  7. 域控制器安装完成没有_tcp_udp_Windows 安装 Jupyter Lab
  8. ole db 访问接口 sqlncli 无法启动分布式事务_阿里终面:分布式事务原理
  9. mac系统做云服务器,mac系统的云服务器
  10. Ubuntu 16.04源码编译安装Apache 2.4.25教程