hihocoder 1183 割点和割边
链接:
http://hihocoder.com/problemset/problem/1183
代码:
1 #include <map> 2 #include <set> 3 #include <cmath> 4 #include <queue> 5 #include <stack> 6 #include <cstdio> 7 #include <string> 8 #include <vector> 9 #include <cstdlib> 10 #include <cstring> 11 #include <sstream> 12 #include <iostream> 13 #include <algorithm> 14 #include <functional> 15 using namespace std; 16 #define rep(i,a,n) for (int i=a;i<n;i++) 17 #define per(i,a,n) for (int i=n-1;i>=a;i--) 18 #define all(x) (x).begin(),(x).end() 19 #define pb push_back 20 #define mp make_pair 21 #define lson l,m,rt<<1 22 #define rson m+1,r,rt<<1|1 23 typedef long long ll; 24 typedef vector<int> VI; 25 typedef pair<int, int> PII; 26 const ll MOD = 1e9 + 7; 27 const int INF = 0x3f3f3f3f; 28 const int MAXN = 2e4 + 7; 29 // head 30 31 int n, m, order = 0; 32 int low[MAXN], dfn[MAXN]; 33 int par[MAXN], son[MAXN]; 34 VI G[MAXN]; 35 VI cutpoint; 36 vector<PII> cutedge; 37 38 void tarjan(int u) { 39 dfn[u] = low[u] = ++order; 40 bool flag = false; 41 rep(i, 0, G[u].size()) { 42 int v = G[u][i]; 43 if (!dfn[v]) { 44 son[u]++; 45 par[v] = u; 46 tarjan(v); 47 if (low[v] >= dfn[u]) flag = true; 48 if (low[v] > dfn[u]) cutedge.pb(mp(min(v, u), max(v, u))); 49 low[u] = min(low[u], low[v]); 50 } 51 else if (v != par[u]) low[u] = min(low[u], dfn[v]); 52 } 53 if ((par[u] == 0 && son[u] > 1) || (par[u] && flag)) cutpoint.pb(u); 54 } 55 56 int main() 57 { 58 cin >> n >> m; 59 while (m--) { 60 int u, v; 61 scanf("%d%d", &u, &v); 62 G[u].pb(v); 63 G[v].pb(u); 64 } 65 tarjan(1); 66 sort(cutedge.begin(), cutedge.end()); 67 sort(cutpoint.begin(), cutpoint.end()); 68 if (cutpoint.size() == 0) cout << "Null" << endl; 69 else { 70 cout << cutpoint[0]; 71 rep(i, 1, cutpoint.size()) printf(" %d", cutpoint[i]); 72 cout << endl; 73 } 74 rep(i, 0, cutedge.size()) 75 printf("%d %d\n", cutedge[i].first, cutedge[i].second); 76 return 0; 77 }
转载于:https://www.cnblogs.com/baocong/p/6740320.html
hihocoder 1183 割点和割边相关推荐
- 知识点 - 割点与割边
知识点 - 割点与割边 概念(一)割点 针对无向连通图,若删除一个点后使得该图不连通,则该点是割点. 注意:一个图中可能有多个割点 复杂度: O(N+M)O(N+M)O(N+M) 实现 我们在遍历所有 ...
- 割点与割边的关系图论
割点与割边可以通过以下两种图来辨别: 1)有环图.在环那一点,是存在割点而不存在割边的. 2)非连通图(注意:非连通图仍可为简单图).在非连通简单图中可以有割边无割点.
- c语言tarjan算法,无向图求割点和割边——Tarjan算法
无向图中求割点集和割边集--Tarjan算法 割点和割边 定义 在一个无向图中,如果删除了某个顶点及与之相连的所有边,产生了一更大连通分量的子图,这样的顶点被称为割点或关节点.对于一个图的所有割点的集 ...
- 路径、连通、连通图,强连通图、连通分量、极大连通子图以及割点、割边保姆级解释
前言: 由于在学习最大割的过程中涉及很多定义,下面先回顾一下关于路径.连通.连通图,强连通图.连通分量.极大连通子图以及割点.割边的定义 目录 1.路径 2.连通 3.连通图 4.强连通图 5.连通分 ...
- 割点、割边(桥) tarjan
定义 割点:无向图删掉一点和它所关联的边,图的连通性增加. 割边(桥):无向图删掉一边,图的连通性增加. 如何求割点? 求割点的时候分两种情况: 从根节点可以遍历整个图那么根节点就不是割点,否则就是割 ...
- 图论算法(五)--求解割点、割边(JAVA)
割点:对于一个连通图来说,如果删除某个点之后图不再连通,这个点就称为割点 割点算法 时间复杂度:O(N+M) 但是下面给出的算法时间复杂度为O(N^2),这是因为下面的存储结构都是邻接矩阵,这样的话用 ...
- 图中割点、割边的理解
割点集合 在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合.(一般是有多个顶点组成) 割边集合 在一个无向连通 ...
- 割点和桥的模板(割点和割边)
(1)割点与桥(割边)的定义(只存在于无向图) 割点:无向连通图中,去掉一个顶点及和它相邻的所有边,图中的连通分量数增加,则该顶点称为割点. 桥(割边):无向联通图中,去掉一条边,图中的连通分量数增加 ...
- 20 求图的割点和割边—Tarjan算法
1 图的割点 问题描述 去掉2号城市,这样剩下的城市之间就不能两两相互到达.例如4号城市不能到5号城市,6号城市也不能到达1号城市等等. 下面将问题抽象化.在一个无向连通图中,如果删除某个顶点后,图不 ...
最新文章
- 监控zabbix面试题
- python安装以及版本检测
- 解决Shockwave flash在谷歌浏览器上崩溃的问题
- win7 64位 vs2015配置opencv3.3.0 关于缺失ucrtbased.dll问题解决
- 流浪地球票房43亿元 今起电影最低票价降10元
- 并查集 删除节点 求集合的个数set hdu 2473
- CUDNN学习笔记(2)
- python list array_Python列表list 数组array常用操作集锦【转】
- 虚幻引擎3命令行参数
- 一个计算机能插两块显卡吗,双显卡有什么好处(一台电脑安装两张不同的显卡)...
- CSR8311/CSR8811 HCI vendor command说明
- VOB视频格式转换器怎么把vob转换为mp3
- 6. Manage the driver for browser and the script for Hub
- vue脚手架下载及使用
- HangFire简单实践
- vue将页面html导出为pdf
- 文笔很差系列2 - 真实的世界
- 高德地图使用-监听地图缩放
- 关键词提取算法TextRank
- 报错:Fragment not attached to an activity
热门文章
- 对话框找不到WM_ERASEBKGND消息的解决方法与对话框背景图片的载入方法
- 把寄存器做成一个结构体,赋值初始地址后寄存器赋值的操作
- Taro+react开发(21)--注意参数格式
- 前端学习(3013):vue+element今日头条管理--表单验证基本使用
- 前端学习(2979):vue-element-admin结构always:true始终显示
- [vue] $nextTick有什么作用?
- [css] 使用css实现霓虹灯效果
- “约见”面试官系列之常见面试题之第九十二篇之created和mounted区别(建议收藏)
- 前端学习(1358) :渲染模板默认
- 前端学习(705):do-while