首先非树边肯定不是割边,因为去掉它DFS树不受影响,只要还能生成一棵DFS树那么图就是连通的。

然后割掉一条树边只可能造成一个点与它的父亲不连通。

那好办,也就是说这个以这个点为根的子树就是上面所说的满足条件的子树,也就是它没有返祖边,不过要注意的是,这里的low被重定义为每个点沿着除了父边之外的所有边能访问到的最小的dfn值,请结合割点割边的含义以及上面加粗的字体理解这句话,差别其实就在于x到父亲可能会有重边。

其他的都一样,核心还是判断x是否是这样的一棵子树。

直接上例题:

天凯是苏联的总书记。苏联有n个城市,某些城市之间修筑了公路。任意两个城市都可以通过公路直接或者间接到达。
天凯发现有些公路被毁坏之后会造成某两个城市之间无法互相通过公路到达。这样的公路就被称为dangerous pavement。
为了防止美帝国对dangerous pavement进行轰炸,造成某些城市的地面运输中断,天凯决定在所有的dangerous pavement驻扎重兵。可是到底哪些是dangerous pavement呢?你的任务就是找出所有这样的公路。

 
   

第一行n,m(1<=n<=150, 1<=m<=5000),分别表示有n个城市,总共m条公路。
以下m行每行两个整数a, b,表示城市a和城市b之间修筑了直接的公路

6 6
1 2
2 3
2 4
3 5
4 5
5 6

输出有若干行。每行包含两个数字a,b(a<b),表示<a,b>是dangerous pavement。请注意:输出时,所有的数对<a,b>必须按照a从小到大排序输出;如果a相同,则根据b从小到大排序。

1 2
5 6


cpp:

 #include<iostream>
#include<string>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<iomanip>
#include<queue>
#include<vector>
#include<ctime>
using namespace std;
const int maxn=;
int len=,linkk[maxn];
int n,m,ind=,top=;
int dfn[maxn],low[maxn];
struct node
{
int x,y;
}e[maxn],ans[maxn]; void init(int xx,int yy)
{
e[++len].y=linkk[xx];linkk[xx]=len;
e[len].x=yy;
} void dfnlow(int x,int p=)
{
int y;
dfn[x]=low[x]=++ind;
for(int i=linkk[x];i;i=e[i].y)
{
y=e[i].x;
if(!dfn[y])
{
dfnlow(y,x);
if(low[y]<low[x])
low[x]=low[y];
if(dfn[x]<low[y])
ans[++top].x=x,ans[top].y=y;
}
else if(dfn[y]<low[x]&&y!=p)
low[x]=dfn[y];
}
} bool mys(node a,node b)
{
return a.x<b.x||a.x==b.x&&a.y<b.y;
} int main()
{
/*freopen("2.in","r",stdin);
freopen("2.out","w",stdout);*/
ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=;i<=m;i++)
{
int a,b;
cin>>a>>b;
init(a,b);
init(b,a);
}
for(int i=;i<=n;i++)
if(!dfn[i])
{
dfnlow(i,i);
}
sort(ans+,ans++top,mys);
for(int i=;i<=top;i++)
cout<<ans[i].x<<" "<<ans[i].y<<endl;
return ;
}

{part2}DFN+LOW(tarjan)割边的更多相关文章

  1. hdu-4738(tarjan割边)

    题意:给你n个点,m条边,边有权值,问你最小的花费使图不连通: 解题思路:就是求边权最小的割边,但这道题有坑点: 1.有重边(桥的两个点有重边时,你去掉一条边并没什么d用): 2.当权值为0的时候,我 ...

  2. {part1}DFN+LOW(tarjan)割点

    什么是jarjan? 1)求割点 定义:在无向连通图中,如果去掉一个点/边,剩下的点之间不连通,那么这个点/边就被称为割点/边(或割顶/桥). 意义:由于割点和割边涉及到图的连通性,所以快速地求出割点 ...

  3. HDU4738 tarjan割边|割边、割点模板

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4738 坑点: 处理重边 图可能不连通,要输出0 若求出的结果是0,则要输出1,因为最少要派一个人 #inc ...

  4. P2746 [USACO5.3]校园网Network of Schools [tarjan缩点]

    题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”).注意即使 BB 在 AA 学校的分发列表中,AA 也不一定在 BB 学校的列表中. ...

  5. Hdu 4738【tanjan求无向图的桥】割边判定定理 dfn[x] < low[y]

    题目: 曹操在长江上建立了一些点,点之间有一些边连着.如果这些点构成的无向图变成了连通图,那么曹操就无敌了.刘备为了防止曹操变得无敌,就打算去摧毁连接曹操的点的桥.但是诸葛亮把所有炸弹都带走了,只留下 ...

  6. Tarjan判断为什么不能把dfn写成low

    Tarjan,我相信大多数人是这么写的: void tarjan(int x) { dfn[x]=low[x]=++cnt; st.push(x),vis[x]=1; for(int i=head[x ...

  7. hihoCoder 1183 连通性一·割边与割点(Tarjan求割点与割边)

    #1183 : 连通性一·割边与割点 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 还记得上次小Hi和小Ho学校被黑客攻击的事情么,那一次攻击最后造成了学校网络数据的丢 ...

  8. 【NOIP训练】【Tarjan求割边】上学

    题目描述 给你一张图,询问当删去某一条边时,起点到终点最短路是否改变. 输入格式 第一行输入两个正整数,分别表示点数和边数.第二行输入两个正整数,起点标号为,终点标号为.接下来行,每行三个整数,表示有 ...

  9. 【学习整理】Tarjan:强连通分量+割点+割边

    Tarjan求强连通分量 在一个有向图中,如果某两点间都有互相到达的路径,那么称中两个点强联通,如果任意两点都强联通,那么称这个图为强联通图:一个有向图的极大强联通子图称为强联通分量.   算法可以在 ...

随机推荐

  1. 重写equals方法

    用下面的例子来进行解释. String name; int id; @Override public boolean equals(Object otherObject) { if (this == ...

  2. 简单的DropDownButton(Winform)

    public class DropDownButton : System.Windows.Forms.Control { private System.ComponentModel.Container ...

  3. vi技巧合集

    VIM 技巧 match & replace match the whole word(eg: match printf but not snprintf/fprintf)You can us ...

  4. STM32中断管理函数

    CM3 内核支持256 个中断,其中包含了16 个内核中断和240 个外部中断,并且具有256 级的可编程中断设置.但STM32 并没有使用CM3 内核的全部东西,而是只用了它的一部分. STM32 ...

  5. 数据处理之CoreData

    一.CoreData数据库框架与Sqlite对比 Sqlite: 1.基于C接口, 需要使用sql语句, 代码繁琐 2.在处理大量数据时, 表关系更直观 3.在OC中不是可视化的 CoreData: ...

  6. position窗口居中

    position的四个属性值: relative absolute fixed static 下面分别讲述这四个属性. <div id="parent">     &l ...

  7. 自定义属性的时候,尽量不要使用value这个命名

    最近我在重写select下拉组件时,使用ul->li来模拟select中的一个个option,并给li添加索引,取名为value. 非IE浏览器下value值工作正常,但是IE下value值工作 ...

  8. 最新Xcode7.x环境下上架iOS App到AppStore 完整流程

    最新Xcode7.x环境下上架iOS App到AppStore 流程  part 1 前言部分 之前App要上架遇到些问题到网上搜上架教程发现都是一些老的版本的教程 ,目前iTunesConnect ...

  9. UIKit框架之UIEvent

    1.继承链:NSObject 2.事件大致可以分为三种事件:触摸事件.动作事件.遥控事件 3.获取事件的touches (1)- (NSSet<UITouch *> *)allTouche ...

  10. 用Unity代码通过Xml配置生成GameObject之——前两天掉的坑

    1. Resources.Load(path),path不是绝对路径,而是相对"Resources/"的相对路径!如: 要想Instantiate则代码应该如下: string m ...