B3610 [图论与代数结构 801] 无向图的块
原题链接
点双联通分量(v-DCC, 无向图的极大点双连通子图):
①当第一个节点第一次被访问时,把该节点入栈.
②当dfn[x] <= low[y]成立时(1)从栈顶不断弹出节点,直至节点y被弹出(2)刚才弹出的所有节点与节点x一起构成一个v-DCC.
#include <bits/stdc++.h>using namespace std; inline int read() {int x = 0, f = 0; char ch = getchar();while (!isdigit(ch)) f = ch == '-', ch = getchar(); while (isdigit(ch)) x = (x << 3) + (x << 1) + (ch ^ 48), ch = getchar(); return f ? -x : x;
}void print(int x) {if (x < 0) x = -x, putchar('-'); if (x < 10) putchar(x + '0'); else {print(x / 10); putchar(x % 10 + '0'); }
}const int N = 5e4 + 5, M = 3e5 + 5;
int n, m, rt, head[N], nex[M << 1], ver[M << 1], tot;
int dfn[N], low[N], cut[N], num;
int stk[N], top;
vector<int> dcc[N]; int cnt; void Addedge(int x, int y) { ver[++tot] = y; nex[tot] = head[x]; head[x] = tot; }void tarjan(int x) {dfn[x] = low[x] = ++num; stk[++top] = x; if (x == rt && !head[x]) {// dcc[++cnt].push_back(x); return; }int flag = 0; for (int i = head[x]; i; i = nex[i]) {int y = ver[i]; if (!dfn[y]) {tarjan(y); low[x] = min(low[x], low[y]); if (low[y] >= dfn[x]) {++flag; if (x != rt || flag > 1) cut[x] = true; ++cnt; int z; do {z = stk[top--]; dcc[cnt].push_back(z); } while (z != y); dcc[cnt].push_back(x);}} else low[x] = min(low[x], dfn[y]);}
}bool cmp(vector<int> a, vector<int> b) {int mi = min(a.size(), b.size()); for (int i = 0; i < mi; ++i) {if (a[i] != b[i]) return a[i] < b[i]; }return a.size() < b.size();
}int main() {n = read(); m = read(); while (m--) {int uu = read(), vv = read(); Addedge(uu, vv); Addedge(vv, uu); }for (int i = 1; i <= n; ++i) {if (!dfn[i]) {rt = i; tarjan(i); }}print(cnt); putchar('\n'); for (int i = 1; i <= cnt; ++i) sort(dcc[i].begin(), dcc[i].end());sort(dcc + 1, dcc + cnt + 1, cmp); for (int i = 1; i <= cnt; ++i) {for (vector<int>::iterator it = dcc[i].begin(); it != dcc[i].end(); ++it) {print(*it); putchar(' '); }putchar('\n'); }return 0;
}
B3610 [图论与代数结构 801] 无向图的块相关推荐
- 0x66.图论 - Tarjan算法与无向图连通性
目录 一.无向图的割点与桥 割点 桥/割边 时间戳 搜索树 追溯值 二.割边判定法则 三.割点判定法则 1.luogu P3388 [模板]割点(割顶) 2.luogu P3469 [POI2008] ...
- 数据结构之图:加权无向图与寻找最小生成树,Python——27
加权无向图与prim算法和Kruskal算法寻找最小生成树 加权无向图的介绍 引入 加权无向图是一种为每条边关联一 个权重值或 是成本的图模型.这种图能够自然地表示许多应用.在一副航空图中,边表示航线 ...
- 无向图的最大团/最大独立集 算法总结
无向图的最大团/最大独立集 算法总结 目录 概述 普通DFS Bron-Kerbosch算法 概述 最大团其实就是最大完全子图的点集,同理极大团也就是极大完全子图的点集,点集内所有的点两两之间都有边相 ...
- 无向图的最大团/最大独立集
讲解的博客:https://blog.csdn.net/SparkFucker/article/details/83051133 还没写完的代码: #include<iostream> # ...
- 【数学建模】图论模型(基础理论+最大流与最小费用流问题)
图论模型 基础理论 1.无向图与有向图 有向图的边称为弧,有向图一般记为 D = ( V , A ) D=(V,A) D=(V,A),其中 V V V 为顶点集, A A A 为弧集. 边的表示 ( ...
- acm算法模板(1)
1. 几何 4 1.1 注意 4 1.2 几何公式 4 1.3 多边形 6 1.4 多边形切割 9 1.5 浮点函数 10 1.6 面积 15 1.7 球面 16 1.8 三角形 17 1.9 三维几 ...
- 想要成为推荐算法工程师,都要准备哪些东西
作者在<推荐算法工程师的成长之道>这篇文章中讲到推荐算法工程师是一个好的职业选择,并且讲解了职业发展路径及定位.怎么成长等话题(还没看的可以看起来). 如果大家认可我讲的并且也愿意将来从事 ...
- 杭电oj题目题型分类(转)
1001 整数求和 水题 1002 C语言实验题--两个数比较 水题 1003 1.2.3.4.5... 简单题 1004 渊子赛马 排序+贪心的方法归并 1005 Hero In Maze 广度搜索 ...
- HDOJ题目分类大全
版权声明:本文为博主原创文章,欢迎转载,转载请注明本文链接! https://blog.csdn.net/qq_38238041/article/details/78178043 杭电里面有很多题目, ...
- HDU题目分类大全【大集合】
基础题: 1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029. 1032.1037.1040.1048.1056.105 ...
最新文章
- 在ARC环境中autoreleasepool(runloop)的研究
- java urlrewriter_java url重写技术(UrlReWriter)
- QML Imports声明
- MybatisPlus_进阶
- 实验一 线性表的顺序存储与实现_【自考】数据结构中的线性表,期末不挂科指南,第2篇
- jQuery得事件绑定
- fwoa中做excel导入时page理解
- Perl 文件和文件夹操作
- 餐饮加盟推广遇到抖音下拉词框会碰撞出什么样的火花
- Python面向对象(初识)
- 修改默认启动操作系统
- 【零基础】PostgreSQL从入门到精通
- JAVA计算机毕业设计钢材商贸公司网络购销管理系统Mybatis+系统+数据库+调试部署
- Yolov4部署到ZYNQ系列1-USB转UART驱动不在COM和LPT显示问题的解决方案
- python是一种什么类型的编程_python是什么类型的编程语言
- 前端团队研发效能提升的探索与实践
- 【Linux入门】— 腾讯云服务器的搭建
- 公司测试部门来了个00后卷王,老油条感叹真干不过,不过.....
- 在一个项目编译多个不同签名、包名、资源实现apk换皮
- android 腾讯视频 dlan,腾讯视频dlna在哪里
热门文章
- 数据库系统概念第六版 第八章练习题 2 3 9
- 学生用计算机如何解方程,学生党必备神器!一键解方程计算器App
- android投屏小米盒子,Mibox S 小米盒子国际版:可能是 2019 新年最值的原生 AndroidTV...
- 基于Python和OpenCV的图像目标检测及分割
- iphone配置实用工具iPhone Configuration Utility
- 如何制作万有特性曲线图
- logistic回归详解
- think-cell 加载项在 Office 出现故障后消失,怎么解决?
- 树莓派4b自带wifi_树莓派4B wifi开机启动
- 使用NATAPP内网穿透