链接:

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 割点和割边相关推荐

  1. 知识点 - 割点与割边

    知识点 - 割点与割边 概念(一)割点 针对无向连通图,若删除一个点后使得该图不连通,则该点是割点. 注意:一个图中可能有多个割点 复杂度: O(N+M)O(N+M)O(N+M) 实现 我们在遍历所有 ...

  2. 割点与割边的关系图论

    割点与割边可以通过以下两种图来辨别: 1)有环图.在环那一点,是存在割点而不存在割边的. 2)非连通图(注意:非连通图仍可为简单图).在非连通简单图中可以有割边无割点.

  3. c语言tarjan算法,无向图求割点和割边——Tarjan算法

    无向图中求割点集和割边集--Tarjan算法 割点和割边 定义 在一个无向图中,如果删除了某个顶点及与之相连的所有边,产生了一更大连通分量的子图,这样的顶点被称为割点或关节点.对于一个图的所有割点的集 ...

  4. 路径、连通、连通图,强连通图、连通分量、极大连通子图以及割点、割边保姆级解释

    前言: 由于在学习最大割的过程中涉及很多定义,下面先回顾一下关于路径.连通.连通图,强连通图.连通分量.极大连通子图以及割点.割边的定义 目录 1.路径 2.连通 3.连通图 4.强连通图 5.连通分 ...

  5. 割点、割边(桥) tarjan

    定义 割点:无向图删掉一点和它所关联的边,图的连通性增加. 割边(桥):无向图删掉一边,图的连通性增加. 如何求割点? 求割点的时候分两种情况: 从根节点可以遍历整个图那么根节点就不是割点,否则就是割 ...

  6. 图论算法(五)--求解割点、割边(JAVA)

    割点:对于一个连通图来说,如果删除某个点之后图不再连通,这个点就称为割点 割点算法 时间复杂度:O(N+M) 但是下面给出的算法时间复杂度为O(N^2),这是因为下面的存储结构都是邻接矩阵,这样的话用 ...

  7. 图中割点、割边的理解

    割点集合 在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合.(一般是有多个顶点组成) 割边集合 在一个无向连通 ...

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

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

  9. 20 求图的割点和割边—Tarjan算法

    1 图的割点 问题描述 去掉2号城市,这样剩下的城市之间就不能两两相互到达.例如4号城市不能到5号城市,6号城市也不能到达1号城市等等. 下面将问题抽象化.在一个无向连通图中,如果删除某个顶点后,图不 ...

最新文章

  1. 监控zabbix面试题
  2. python安装以及版本检测
  3. 解决Shockwave flash在谷歌浏览器上崩溃的问题
  4. win7 64位 vs2015配置opencv3.3.0 关于缺失ucrtbased.dll问题解决
  5. 流浪地球票房43亿元 今起电影最低票价降10元
  6. 并查集 删除节点 求集合的个数set hdu 2473
  7. CUDNN学习笔记(2)
  8. python list array_Python列表list 数组array常用操作集锦【转】
  9. 虚幻引擎3命令行参数
  10. 一个计算机能插两块显卡吗,双显卡有什么好处(一台电脑安装两张不同的显卡)...
  11. CSR8311/CSR8811 HCI vendor command说明
  12. VOB视频格式转换器怎么把vob转换为mp3
  13. 6. Manage the driver for browser and the script for Hub
  14. vue脚手架下载及使用
  15. HangFire简单实践
  16. vue将页面html导出为pdf
  17. 文笔很差系列2 - 真实的世界
  18. 高德地图使用-监听地图缩放
  19. 关键词提取算法TextRank
  20. 报错:Fragment not attached to an activity

热门文章

  1. 对话框找不到WM_ERASEBKGND消息的解决方法与对话框背景图片的载入方法
  2. 把寄存器做成一个结构体,赋值初始地址后寄存器赋值的操作
  3. Taro+react开发(21)--注意参数格式
  4. 前端学习(3013):vue+element今日头条管理--表单验证基本使用
  5. 前端学习(2979):vue-element-admin结构always:true始终显示
  6. [vue] $nextTick有什么作用?
  7. [css] 使用css实现霓虹灯效果
  8. “约见”面试官系列之常见面试题之第九十二篇之created和mounted区别(建议收藏)
  9. 前端学习(1358) :渲染模板默认
  10. 前端学习(705):do-while