Tarjan-割点
时间:2019-11-23
本文章向大家介绍Tarjan-割点,主要包括Tarjan-割点使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
割点——tarjan
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 const int MAXN = 20001; 5 const int MAXM = 100001; 6 int n, m; 7 int ans;//个数 8 9 10 int head[MAXN], cnt, v[2 * MAXM], nxt[2 * MAXM]; 11 void add(int x, int y) { 12 nxt[++cnt] = head[x]; 13 head[x] = cnt; 14 v[cnt] = y; 15 } 16 17 18 int dfn[MAXN], low[MAXN], ind; 19 int cut[MAXN]; 20 21 22 void tarjan(int now, int fa) { 23 dfn[now] = low[now] = ++ind; 24 int child = 0; 25 for (int i = head[now]; i ; i = nxt[i]) { 26 if(!dfn[v[i]]) { 27 tarjan(v[i], now); 28 low[now] = min(low[now], low[v[i]]); 29 30 if(low[v[i]] >= dfn[now] && now != fa) cut[now] = 1;//不为根节点 31 if(now == fa) child++; //为根节点,子树统计 32 } 33 else { 34 low[now] = min(low[now], dfn[v[i]]); 35 } 36 } 37 if(now == fa && child >= 2) cut[now] = 1;//为根节点且有两个及以上的子节点 38 } 39 int main() { 40 41 scanf("%d%d", &n, &m); 42 for (int i = 1; i <= m; i++) { 43 int x, y; 44 scanf("%d%d", &x, &y); 45 add(x, y); 46 add(y, x); 47 } 48 49 for (int i = 1; i <= n; i++) 50 if(!dfn[i]) 51 tarjan(i, i); 52 53 for (int i = 1; i <= n; i++) 54 if(cut[i] == 1) 55 ans++; 56 printf("%d\n", ans); 57 for (int i = 1; i <= n; i++) 58 if(cut[i] == 1) 59 printf("%d ", i); 60 61 62 return 0; 63 }
原文地址:https://www.cnblogs.com/hangzz/p/11919191.html
- 一段oracle中的“复杂”分组统计sql
- 通过Chocolatey软件包管理器安装.NET Core
- rsync同步时,删除目标目录比源目录多余文件的方法(--delete)
- 近期一枚“大文娱”dawenyu.com域名以小六位价格易主
- 分布式监控系统Zabbix-3.0.3-完整安装记录(0)
- URL安全的Base64编码
- 温故而知新:设计模式之原型模式(Prototype)
- Windows 7上执行Cake 报错原因是Powershell 版本问题
- 温故而知新:类索引器
- Visual Studio Code 代理设置
- 温故而知新:设计模式之工厂模式(Factory)
- 通过Jexus 部署 dotnetcore版本MusicStore 示例程序
- jquery.mobile手机网页简要
- 跟张志东深聊腾讯的“进化力”
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【小技巧】argc和argv的用法
- 全面分析redis持久化机制
- 【奇技淫巧】-- 接雨水
- 【奇技淫巧】-- 最长连续序列
- 【redis】跟我一起动手玩玩redis主从复制和哨兵模式
- 【C++】八大排序算法 :GIF + 亲测代码 +专项练习平台
- 【C++】勉强能看的线程池详解
- 国密SSL协议之Java编程
- 7. Jackson用树模型处理JSON是必备技能,不信你看
- epoll,求知者离我近点
- SOCKET网络编程 (通俗易懂入门篇)
- 进程 · 全家桶
- Posix线程 它们那一大家子事儿,要觉得好你就收藏进被窝慢慢看(2)
- Posix线程 它们那一大家子事儿,要觉得好你就收藏进被窝里慢慢看 (1)
- 种树:二叉树、二叉搜索树、AVL树、红黑树、哈夫曼树、B树、树与森林