题目链接:http://poj.org/problem?id=3177

题意:求最少加几条边使得没对点都有至少两条路互通。

题解:边双连通顾名思义,可以先求一下连通块显然连通块里的点都是双连通的,然后就是各个连通块之间的问题。

也就是说只要求一下桥,然后某个连通块桥的个数位1的总数,结果就是(ans+1)/2。为什么是这个结果自行画图

理解一下,挺好理解的。

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int N = 1e5 + 10;
const int M = 2e5 + 10;
struct TnT {int v , next;bool cut;
}edge[M];
int head[N] , e;
int Low[N] , DFN[N] , Stack[N] , Belong[N];
bool Instack[N];
int Index , top , bridge , block;
void init() {memset(head , -1 , sizeof(head));e = 0;
}
void add(int u , int v) {edge[e].v = v , edge[e].next = head[u] , edge[e].cut = false , head[u] = e++;
}
void Tarjan(int u , int pre) {int v;Low[u] = DFN[u] = ++Index;Stack[top++] = u;Instack[u] = true;for(int i = head[u] ; i != -1 ; i = edge[i].next) {v = edge[i].v;if(v == pre) continue;if(!DFN[v]) {Tarjan(v , u);Low[u] = min(Low[u] , Low[v]);if(Low[v] > DFN[u]) {bridge++;edge[i].cut = true;edge[i^1].cut = true;}}else if(Instack[v]) Low[u] = min(Low[u] , DFN[v]);}if(Low[u] == DFN[u]) {block++;do {v = Stack[--top];Instack[v] = false;Belong[v] =  block;} while(v != u);}
}
int du[N];
int main() {int f , r;while(~scanf("%d%d" , &f , &r)) {init();for(int i = 0 ; i < r ; i++) {int u , v;scanf("%d%d" , &u , &v);add(u , v);add(v , u);}memset(DFN , 0 , sizeof(DFN));memset(Instack , false , sizeof(Instack));memset(du , 0 , sizeof(du));Index = 0 , block = 0 , top = 0;for(int i = 1 ; i <= f ; i++)if(!DFN[i]) Tarjan(i , i);for(int i = 1 ; i <= f ; i++) {for(int j = head[i] ; j != -1 ; j = edge[j].next) {if(edge[j].cut) {du[Belong[i]]++;}}}int ans = 0;for(int i = 1 ; i <= block ; i++) {if(du[i] == 1) {ans++;}}printf("%d\n" , (ans + 1) / 2);}return 0;
}

转载于:https://www.cnblogs.com/TnT2333333/p/6881882.html

poj 3177 Redundant Paths(tarjan边双连通)相关推荐

  1. POJ 3177 Redundant Paths POJ 3352 Road Construction(双连接)

    POJ 3177 Redundant Paths POJ 3352 Road Construction 题目链接 题意:两题一样的.一份代码能交.给定一个连通无向图,问加几条边能使得图变成一个双连通图 ...

  2. POJ 3177 Redundant Paths (边双连通+缩点)

    <题目链接> <转载于 >>>  > 题目大意: 有n个牧场,Bessie 要从一个牧场到另一个牧场,要求至少要有2条独立的路可以走.现已有m条路,求至少要新 ...

  3. POJ 3177 Redundant Paths(边双联通分量)

    题目描述: In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numbered 1 ...

  4. POJ 3352 Road Construction ; POJ 3177 Redundant Paths (双联通)

    这两题好像是一样的,就是3177要去掉重边. 但是为什么要去重边呢??????我认为如果有重边的话,应该也要考虑在内才是. 这两题我用了求割边,在去掉割边,用DFS缩点. 有大神说用Tarjan,不过 ...

  5. POJ - 3177 Redundant Paths(边双缩点)

    题目链接:点击查看 题目大意:给出一个由n个点和m条边构成的无向图,现在问至少添加几条边,才能使得任意两点之间都能由至少两条不同的路到达 题目分析:既然要让任意两点之间至少由两条道路连接,换句话说也就 ...

  6. POJ - 3177 Redundant Paths 双联通补边

    题目链接 题意:给出一个多条边问需要加几条变才能变成双连通图. 首先要缩点,缩点之后就是变成了一个没有强连通分量的图,这时候只需要统计入度为1的点有多少个,然后通过观察发现将点两两连接即可,answe ...

  7. poj 3177 Redundant Paths

    双连通分量 题意:给一个无向图,问要添加多少条边形成边双连通分量.注意图一开始是连通的,所以只要从一个点开始dfs一次就行了,另外这图有重边,(1,2)(2,1)这样,则1,2就形成了一个边双连通分量 ...

  8. 【POJ - 3177】Redundant Paths(边双连通分量,去重边)

    题干: In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numbered 1.. ...

  9. Redundant Paths POJ - 3177(tarjan+边双连通分量)

    题意: 有n个牧场,要求从一个牧场到另一个牧场,要求至少要有2条独立的路可以走.现已有m条路,求至少要新建多少条路,使得任何两个牧场之间至少有两条独立的路.两条独立的路是指:没有公共边的路,但可以经过 ...

最新文章

  1. jakarta ee_Jakarta EE中的规范范围
  2. 论文浅尝 | 面向多语言语义解析的神经网络框架
  3. 好看的二次元个人主页导航源码 动态背景+背景音乐
  4. axure侧弹层遮罩_Axure教程 带遮罩层的弹出框(9)
  5. 最小,独立,可分发的跨平台Web服务器
  6. Windows学习总结(23)——在 Windows 10 子系统 ubuntu 上利用 WSL2 安装 docker 的 2 种方式
  7. 机器学习发展历史回顾
  8. PHP 框架集成使用 UEditor 编辑器的方法
  9. Unity Shader数学基础——笛卡尔坐标,点,矢量
  10. 中国首台超级计算机“天河一号,我国首台超级计算机“天河一号”超负荷运行...
  11. Spyglass之CDC检查(5)
  12. 析取 合取 析取范式 合取范式
  13. 计算机图像图形处理相关概念
  14. Java语言,基于TCP编写一个简单的Client/Server 网络应用程序。
  15. OpenCV的本地相机抓图和本地视频取帧
  16. 计算机公办学校招收人数,2018长沙市小升初微机派位一共有多少人参加
  17. 51单片机——矩阵按键逐行扫描短按长按一直按方案1.2
  18. 爬虫——爬取MOOC课程资源
  19. 如何在万米高空畅享5G?
  20. 创业者必须要知道的18条商业定律与法则

热门文章

  1. 快速掌握 10 个 HTML5 必备技巧
  2. 常见Web技术之间的关系,你知道多少?
  3. anki 插入表格_Anki+思维导图的两种方法(Anki+表格,Anki+幕布)
  4. 宝塔定时任务执行php源码任务_在WINDOWS任务计划程序下执行PHP文件 PHP定时功能的实现...
  5. python更改数据框指定位置的数据_python-如何使用来自另一个数据框的新值更新pyspark数据框?...
  6. #{}不自动改参数类型_我是干流动补胎的,想让我的柴油机气泵自动打气,怎么改装。谢谢。...
  7. linux集群组建和管理,Redis集群搭建与管理
  8. java 排序 1和1_新手入门-冒泡排序和选择排序第一节排序1.1排序概述排序(
  9. 单片机ADC采样算法----限幅平均滤波法
  10. NYOJ-区域赛系列一多边形划分(贪心)