hdu2460-Network:边的双连通分量
题目大意:给出一个无向图以及Q次询问,每次询问增加一条无向边,要求输出增加这条边后剩余的桥的数目。
算法:类似于求割点的方法,先做一次dfs求出所有的桥,并且维护这棵dfs树,当一次询问加入一条边(a,b)之后,会在dfs上形成一个环,在这个环上的桥都变为非桥,这个环肯定经过a和b的LCA,此时我们只需在求LCA的过程中把经过的为桥的树边标记为非桥,同时cnt_bridge--再输出即可。
需要注意的是树边的编号是用树边指向的那个节点的编号来表示的,例如树边<u,v>用编号v表示。
还有就是加入一个#pragma预处理指令可以防止爆栈。
#include <iostream>
#include <stdio.h>
#include <cstring>
#include <vector>
using namespace std;
#pragma comment(linker,"/STACk:10240000,10240000") const int maxn = + ;
int low[maxn],pre[maxn], iscut[maxn], dfs_clock=;
bool isbridge[maxn];
vector<int> G[maxn];
int cnt_bridge;
int father[maxn]; int dfs(int u, int fa)
{
father[u]=fa;
int lowu = pre[u] = ++dfs_clock;
int child = ;
for(int i = ; i < G[u].size(); i++)
{
int v = G[u][i];
if(!pre[v]) // 没有访问过v
{
child++;
int lowv = dfs(v, u);
lowu = min(lowu, lowv); // 用后代的low函数更新自己
if(lowv > pre[u]) // 判断边(u,v)是否为桥
{
isbridge[v]=true;
cnt_bridge++;
}
}
else if(pre[v] < pre[u] && v != fa)
{
lowu = min(lowu, pre[v]); // 用反向边更新自己
}
}
if(fa < && child == )
iscut[u] = ;
return low[u]=lowu;
} void init(int n)
{
memset(isbridge,false,sizeof isbridge);
memset(pre,,sizeof pre);
cnt_bridge=dfs_clock=;
for(int i=; i<n; i++)
{
G[i].clear();
}
} void LCA(int a,int b)
{
while(pre[a]>pre[b])
{
if(isbridge[a])
{
isbridge[a]=false;
cnt_bridge--;
}
a=father[a];
}
while(pre[b]>pre[a])
{
if(isbridge[b])
{
isbridge[b]=false;
cnt_bridge--;
}
b=father[b];
}
if(a!=b)
{
while(pre[a]>pre[b])
{
if(isbridge[a])
{
isbridge[a]=false;
cnt_bridge--;
}
a=father[a];
}
while(pre[b]>pre[a])
{
if(isbridge[b])
{
isbridge[b]=false;
cnt_bridge--;
}
b=father[b];
}
}
} int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif int n,m,Case=;
while(scanf("%d %d",&n,&m),!(n== && m==))
{
init(n);
for(int i=; i<m; i++)
{
int a,b;
scanf("%d %d",&a,&b);
a--;
b--;
G[a].push_back(b);
G[b].push_back(a);
} // 第一次dfs找出所有的桥
dfs(,-);
int Q;
cin>>Q;
printf("Case %d:\n",Case++);
while(Q--)
{
int a,b;
scanf("%d %d",&a,&b);
a--;
b--;
LCA(a,b);
printf("%d\n",cnt_bridge);
if(Q==)
printf("\n");
}
} return ;
}
hdu2460-Network:边的双连通分量的更多相关文章
- POJ3694 Network(边双连通分量+缩点+LCA)
题目大概是给一张图,动态加边动态求割边数. 本想着求出边双连通分量后缩点,然后构成的树用树链剖分+线段树去维护路径上的边数和..好像好难写.. 看了别人的解法,这题有更简单的算法: 在任意两点添边,那 ...
- POJ1144 Network 题解 点双连通分量(求割点数量)
题目链接:http://poj.org/problem?id=1144 题目大意:给以一个无向图,求割点数量. 这道题目的输入和我们一般见到的不太一样. 它首先输入 \(N\)(\(\lt 100\) ...
- [Codeforces 555E]Case of Computer Network(Tarjan求边-双连通分量+树上差分)
[Codeforces 555E]Case of Computer Network(Tarjan求边-双连通分量+树上差分) 题面 给出一个无向图,以及q条有向路径.问是否存在一种给边定向的方案,使得 ...
- [hdu2460]network(依次连边并询问图中割边数量) tarjan边双联通分量+lca
题意: 给定一个n个点m条边的无向图,q个操作,每个操作给(x,y)连边并询问此时图中的割边有多少条.(连上的边会一直存在) n<=1e5,m<=2*10^5,q<=1e3,多组数据 ...
- HDU 2460 Network 边双连通分量 缩点
题意: 给出一个无向连通图,有\(m\)次操作,每次在\(u, v\)之间加一条边,并输出此时图中桥的个数. 分析: 先找出边双连通分量然后缩点得到一棵树,树上的每条边都输原图中的桥,因此此时桥的个数 ...
- tarjan算法与无向图的连通性(割点,桥,双连通分量,缩点)
基本概念 给定无向连通图G = (V, E)割点:对于x∈V,从图中删去节点x以及所有与x关联的边之后,G分裂为两个或两个以上不相连的子图,则称x为割点割边(桥)若对于e∈E,从图中删去边e之后,G分 ...
- 双连通分量(点-双连通分量&边-双连通分量)
概念: 双连通分量有点双连通分量和边双连通分量两种.若一个无向图中的去掉任意一个节点(一条边)都不会改变此图的连通性,即不存在割点(桥),则称作点(边)双连通图. 一个无向图中的每一个极大点(边)双连 ...
- POJ2942 Knights of the Round Table[点双连通分量|二分图染色|补图]
Knights of the Round Table Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 12439 Acce ...
- 【Codefoces487E/UOJ#30】Tourists Tarjan 点双连通分量 + 树链剖分
E. Tourists time limit per test: 2 seconds memory limit per test: 256 megabytes input: standard inpu ...
- 【BZOJ-2730】矿场搭建 Tarjan 双连通分量
2730: [HNOI2012]矿场搭建 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1602 Solved: 751[Submit][Statu ...
随机推荐
- iOS-BLE蓝牙开发持续更新
文/煜寒了(简书作者)原文链接:http://www.jianshu.com/p/84b5b834b942著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 在写这个博客之前,空余时间抽看 ...
- 在Debian Wheezy 7.3.0上编译安装3.12.14内核
最近需要对Linux的一个内核模块进行调整实验,故决定先在虚拟机中完成编译调试工作,最后再在真实的系统上进行测试.为了防止遗忘,把过程记录于此. 1. 准备系统环境 首先从官网下载最新版的Virtua ...
- ViewDragHelper详解
2013年谷歌i/o大会上介绍了两个新的layout: SlidingPaneLayout和DrawerLayout,现在这俩个类被广泛的运用,其实研究他们的源码你会发现这两个类都运用了ViewDra ...
- LinkButton( 按钮)
一. 加载方式 //class 加载方式<a href="###" class="easyui-linkbutton">按钮</a> / ...
- 解决sql2008连接数据库,无法为该请求检索数据,错误916
通常在使用sql server management studio 2008 连接数据库,可以链接上,但是无法查看自己的数据库,点击数据库或刷新数据库列表后,提示:无法为该请求检索数据,错误916,如 ...
- (转)jQuery.extend 函数详解
Jquery的扩展方法extend是我们在写插件的过程中常用的方法,该方法有一些重载原型,在此,我们一起去了解了解 JQuery的extend扩展方法: Jquery的扩展方法extend ...
- 高性能ORM框架XLinq功能详细介绍
之前简单介绍了XLinq的一些功能,有很多功能都没有提到,现在给XLinq加了一些功能,这次把所有功能都介绍一遍. 设计目标 易用性 在使用一个框架的时候 应该没几个人会喜欢写一大堆的配置文件吧 也应 ...
- 数据库元数据分析Demo
核心类:DatabaseMetaData.ResultSetMetaData 1 System.err.println("********************************** ...
- 个性A标签
问题: 前段时间,小琳同学问我A标签为啥alert出来的是它的href? 示例: 先来两个标签比较一下. <a id="a" href="http://www.ba ...
- 前端优化:BigRender
前言 有对象才叫跨年,没对象叫熬夜.所以,在这没对象的元旦假期的夜里捣弄了一下前端优化的东西.如果你听说过FaceBook,太好了,你肯定是个网 络潮人:如果你还听说过FaceBook的bigpipe ...